18 #ifndef UA_DYNAMIC_LINKING_EXPORT 19 # define UA_DYNAMIC_LINKING_EXPORT 110 #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) 111 #define _Q_INVALIDATE(a) (a) = ((void *)-1) 113 #define _Q_INVALIDATE(a) 119 #define SLIST_HEAD(name, type) \ 121 struct type *slh_first; \ 124 #define SLIST_HEAD_INITIALIZER(head) \ 132 #define SLIST_ENTRY(type) \ 134 struct type *sle_next; \ 140 #define SLIST_FIRST(head) ((head)->slh_first) 141 #define SLIST_END(head) NULL 142 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) 143 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 145 #define SLIST_FOREACH(var, head, field) \ 146 for((var) = SLIST_FIRST(head); \ 147 (var) != SLIST_END(head); \ 148 (var) = SLIST_NEXT(var, field)) 150 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 151 for ((var) = SLIST_FIRST(head); \ 152 (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ 158 #define SLIST_INIT(head) { \ 159 SLIST_FIRST(head) = SLIST_END(head); \ 162 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 163 (elm)->field.sle_next = (slistelm)->field.sle_next; \ 164 (slistelm)->field.sle_next = (elm); \ 167 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 168 (elm)->field.sle_next = (head)->slh_first; \ 169 (head)->slh_first = (elm); \ 172 #define SLIST_REMOVE_AFTER(elm, field) do { \ 173 (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ 176 #define SLIST_REMOVE_HEAD(head, field) do { \ 177 (head)->slh_first = (head)->slh_first->field.sle_next; \ 180 #define SLIST_REMOVE(head, elm, type, field) do { \ 181 if ((head)->slh_first == (elm)) { \ 182 SLIST_REMOVE_HEAD((head), field); \ 184 struct type *curelm = (head)->slh_first; \ 186 while (curelm->field.sle_next != (elm)) \ 187 curelm = curelm->field.sle_next; \ 188 curelm->field.sle_next = \ 189 curelm->field.sle_next->field.sle_next; \ 190 _Q_INVALIDATE((elm)->field.sle_next); \ 197 #define LIST_HEAD(name, type) \ 199 struct type *lh_first; \ 202 #define LIST_HEAD_INITIALIZER(head) \ 205 #define LIST_ENTRY(type) \ 207 struct type *le_next; \ 208 struct type **le_prev; \ 214 #define LIST_FIRST(head) ((head)->lh_first) 215 #define LIST_END(head) NULL 216 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) 217 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 219 #define LIST_FOREACH(var, head, field) \ 220 for((var) = LIST_FIRST(head); \ 221 (var)!= LIST_END(head); \ 222 (var) = LIST_NEXT(var, field)) 224 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 225 for ((var) = LIST_FIRST(head); \ 226 (var) && ((tvar) = LIST_NEXT(var, field), 1); \ 232 #define LIST_INIT(head) do { \ 233 LIST_FIRST(head) = LIST_END(head); \ 236 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 237 if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 238 (listelm)->field.le_next->field.le_prev = \ 239 &(elm)->field.le_next; \ 240 (listelm)->field.le_next = (elm); \ 241 (elm)->field.le_prev = &(listelm)->field.le_next; \ 244 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 245 (elm)->field.le_prev = (listelm)->field.le_prev; \ 246 (elm)->field.le_next = (listelm); \ 247 *(listelm)->field.le_prev = (elm); \ 248 (listelm)->field.le_prev = &(elm)->field.le_next; \ 251 #define LIST_INSERT_HEAD(head, elm, field) do { \ 252 if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 253 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 254 (head)->lh_first = (elm); \ 255 (elm)->field.le_prev = &(head)->lh_first; \ 258 #define LIST_REMOVE(elm, field) do { \ 259 if ((elm)->field.le_next != NULL) \ 260 (elm)->field.le_next->field.le_prev = \ 261 (elm)->field.le_prev; \ 262 *(elm)->field.le_prev = (elm)->field.le_next; \ 263 _Q_INVALIDATE((elm)->field.le_prev); \ 264 _Q_INVALIDATE((elm)->field.le_next); \ 267 #define LIST_REPLACE(elm, elm2, field) do { \ 268 if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ 269 (elm2)->field.le_next->field.le_prev = \ 270 &(elm2)->field.le_next; \ 271 (elm2)->field.le_prev = (elm)->field.le_prev; \ 272 *(elm2)->field.le_prev = (elm2); \ 273 _Q_INVALIDATE((elm)->field.le_prev); \ 274 _Q_INVALIDATE((elm)->field.le_next); \ 280 #define SIMPLEQ_HEAD(name, type) \ 282 struct type *sqh_first; \ 283 struct type **sqh_last; \ 286 #define SIMPLEQ_HEAD_INITIALIZER(head) \ 287 { NULL, &(head).sqh_first } 289 #define SIMPLEQ_ENTRY(type) \ 291 struct type *sqe_next; \ 297 #define SIMPLEQ_FIRST(head) ((head)->sqh_first) 298 #define SIMPLEQ_END(head) NULL 299 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) 300 #define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) 302 #define SIMPLEQ_FOREACH(var, head, field) \ 303 for((var) = SIMPLEQ_FIRST(head); \ 304 (var) != SIMPLEQ_END(head); \ 305 (var) = SIMPLEQ_NEXT(var, field)) 307 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 308 for ((var) = SIMPLEQ_FIRST(head); \ 309 (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ 315 #define SIMPLEQ_INIT(head) do { \ 316 (head)->sqh_first = NULL; \ 317 (head)->sqh_last = &(head)->sqh_first; \ 320 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 321 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ 322 (head)->sqh_last = &(elm)->field.sqe_next; \ 323 (head)->sqh_first = (elm); \ 326 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 327 (elm)->field.sqe_next = NULL; \ 328 *(head)->sqh_last = (elm); \ 329 (head)->sqh_last = &(elm)->field.sqe_next; \ 332 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 333 if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ 334 (head)->sqh_last = &(elm)->field.sqe_next; \ 335 (listelm)->field.sqe_next = (elm); \ 338 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \ 339 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ 340 (head)->sqh_last = &(head)->sqh_first; \ 343 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 344 if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ 346 (head)->sqh_last = &(elm)->field.sqe_next; \ 352 #define XSIMPLEQ_HEAD(name, type) \ 354 struct type *sqx_first; \ 355 struct type **sqx_last; \ 356 unsigned long sqx_cookie; \ 359 #define XSIMPLEQ_ENTRY(type) \ 361 struct type *sqx_next; \ 367 #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ 368 (unsigned long)(ptr))) 369 #define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) 370 #define XSIMPLEQ_END(head) NULL 371 #define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) 372 #define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) 375 #define XSIMPLEQ_FOREACH(var, head, field) \ 376 for ((var) = XSIMPLEQ_FIRST(head); \ 377 (var) != XSIMPLEQ_END(head); \ 378 (var) = XSIMPLEQ_NEXT(head, var, field)) 380 #define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 381 for ((var) = XSIMPLEQ_FIRST(head); \ 382 (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ 388 #define XSIMPLEQ_INIT(head) do { \ 389 arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ 390 (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ 391 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 394 #define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 395 if (((elm)->field.sqx_next = (head)->sqx_first) == \ 396 XSIMPLEQ_XOR(head, NULL)) \ 397 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 398 (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ 401 #define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 402 (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ 403 *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ 404 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 407 #define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 408 if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ 409 XSIMPLEQ_XOR(head, NULL)) \ 410 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 411 (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ 414 #define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ 415 if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ 416 (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ 417 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 420 #define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 421 if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ 422 (elm)->field.sqx_next)->field.sqx_next) \ 423 == XSIMPLEQ_XOR(head, NULL)) \ 425 XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 432 #define TAILQ_HEAD(name, type) \ 434 struct type *tqh_first; \ 435 struct type **tqh_last; \ 438 #define TAILQ_HEAD_INITIALIZER(head) \ 439 { NULL, &(head).tqh_first } 441 #define TAILQ_ENTRY(type) \ 443 struct type *tqe_next; \ 444 struct type **tqe_prev; \ 450 #define TAILQ_FIRST(head) ((head)->tqh_first) 451 #define TAILQ_END(head) NULL 452 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 453 #define TAILQ_LAST(head, headname) \ 454 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 456 #define TAILQ_PREV(elm, headname, field) \ 457 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 458 #define TAILQ_EMPTY(head) \ 459 (TAILQ_FIRST(head) == TAILQ_END(head)) 461 #define TAILQ_FOREACH(var, head, field) \ 462 for((var) = TAILQ_FIRST(head); \ 463 (var) != TAILQ_END(head); \ 464 (var) = TAILQ_NEXT(var, field)) 466 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 467 for ((var) = TAILQ_FIRST(head); \ 468 (var) != TAILQ_END(head) && \ 469 ((tvar) = TAILQ_NEXT(var, field), 1); \ 473 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 474 for((var) = TAILQ_LAST(head, headname); \ 475 (var) != TAILQ_END(head); \ 476 (var) = TAILQ_PREV(var, headname, field)) 478 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 479 for ((var) = TAILQ_LAST(head, headname); \ 480 (var) != TAILQ_END(head) && \ 481 ((tvar) = TAILQ_PREV(var, headname, field), 1); \ 487 #define TAILQ_INIT(head) do { \ 488 (head)->tqh_first = NULL; \ 489 (head)->tqh_last = &(head)->tqh_first; \ 492 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 493 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 494 (head)->tqh_first->field.tqe_prev = \ 495 &(elm)->field.tqe_next; \ 497 (head)->tqh_last = &(elm)->field.tqe_next; \ 498 (head)->tqh_first = (elm); \ 499 (elm)->field.tqe_prev = &(head)->tqh_first; \ 502 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 503 (elm)->field.tqe_next = NULL; \ 504 (elm)->field.tqe_prev = (head)->tqh_last; \ 505 *(head)->tqh_last = (elm); \ 506 (head)->tqh_last = &(elm)->field.tqe_next; \ 509 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 510 if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 511 (elm)->field.tqe_next->field.tqe_prev = \ 512 &(elm)->field.tqe_next; \ 514 (head)->tqh_last = &(elm)->field.tqe_next; \ 515 (listelm)->field.tqe_next = (elm); \ 516 (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 519 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 520 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 521 (elm)->field.tqe_next = (listelm); \ 522 *(listelm)->field.tqe_prev = (elm); \ 523 (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 526 #define TAILQ_REMOVE(head, elm, field) do { \ 527 if (((elm)->field.tqe_next) != NULL) \ 528 (elm)->field.tqe_next->field.tqe_prev = \ 529 (elm)->field.tqe_prev; \ 531 (head)->tqh_last = (elm)->field.tqe_prev; \ 532 *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 533 _Q_INVALIDATE((elm)->field.tqe_prev); \ 534 _Q_INVALIDATE((elm)->field.tqe_next); \ 537 #define TAILQ_REPLACE(head, elm, elm2, field) do { \ 538 if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ 539 (elm2)->field.tqe_next->field.tqe_prev = \ 540 &(elm2)->field.tqe_next; \ 542 (head)->tqh_last = &(elm2)->field.tqe_next; \ 543 (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ 544 *(elm2)->field.tqe_prev = (elm2); \ 545 _Q_INVALIDATE((elm)->field.tqe_prev); \ 546 _Q_INVALIDATE((elm)->field.tqe_next); \ 552 #define CIRCLEQ_HEAD(name, type) \ 554 struct type *cqh_first; \ 555 struct type *cqh_last; \ 558 #define CIRCLEQ_HEAD_INITIALIZER(head) \ 559 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } 561 #define CIRCLEQ_ENTRY(type) \ 563 struct type *cqe_next; \ 564 struct type *cqe_prev; \ 570 #define CIRCLEQ_FIRST(head) ((head)->cqh_first) 571 #define CIRCLEQ_LAST(head) ((head)->cqh_last) 572 #define CIRCLEQ_END(head) ((void *)(head)) 573 #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 574 #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 575 #define CIRCLEQ_EMPTY(head) \ 576 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) 578 #define CIRCLEQ_FOREACH(var, head, field) \ 579 for((var) = CIRCLEQ_FIRST(head); \ 580 (var) != CIRCLEQ_END(head); \ 581 (var) = CIRCLEQ_NEXT(var, field)) 583 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ 584 for ((var) = CIRCLEQ_FIRST(head); \ 585 (var) != CIRCLEQ_END(head) && \ 586 ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ 589 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 590 for((var) = CIRCLEQ_LAST(head); \ 591 (var) != CIRCLEQ_END(head); \ 592 (var) = CIRCLEQ_PREV(var, field)) 594 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 595 for ((var) = CIRCLEQ_LAST(head, headname); \ 596 (var) != CIRCLEQ_END(head) && \ 597 ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ 603 #define CIRCLEQ_INIT(head) do { \ 604 (head)->cqh_first = CIRCLEQ_END(head); \ 605 (head)->cqh_last = CIRCLEQ_END(head); \ 608 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 609 (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 610 (elm)->field.cqe_prev = (listelm); \ 611 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ 612 (head)->cqh_last = (elm); \ 614 (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 615 (listelm)->field.cqe_next = (elm); \ 618 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 619 (elm)->field.cqe_next = (listelm); \ 620 (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 621 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ 622 (head)->cqh_first = (elm); \ 624 (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 625 (listelm)->field.cqe_prev = (elm); \ 628 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 629 (elm)->field.cqe_next = (head)->cqh_first; \ 630 (elm)->field.cqe_prev = CIRCLEQ_END(head); \ 631 if ((head)->cqh_last == CIRCLEQ_END(head)) \ 632 (head)->cqh_last = (elm); \ 634 (head)->cqh_first->field.cqe_prev = (elm); \ 635 (head)->cqh_first = (elm); \ 638 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 639 (elm)->field.cqe_next = CIRCLEQ_END(head); \ 640 (elm)->field.cqe_prev = (head)->cqh_last; \ 641 if ((head)->cqh_first == CIRCLEQ_END(head)) \ 642 (head)->cqh_first = (elm); \ 644 (head)->cqh_last->field.cqe_next = (elm); \ 645 (head)->cqh_last = (elm); \ 648 #define CIRCLEQ_REMOVE(head, elm, field) do { \ 649 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ 650 (head)->cqh_last = (elm)->field.cqe_prev; \ 652 (elm)->field.cqe_next->field.cqe_prev = \ 653 (elm)->field.cqe_prev; \ 654 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ 655 (head)->cqh_first = (elm)->field.cqe_next; \ 657 (elm)->field.cqe_prev->field.cqe_next = \ 658 (elm)->field.cqe_next; \ 659 _Q_INVALIDATE((elm)->field.cqe_prev); \ 660 _Q_INVALIDATE((elm)->field.cqe_next); \ 663 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ 664 if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ 666 (head)->cqh_last = (elm2); \ 668 (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ 669 if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ 671 (head)->cqh_first = (elm2); \ 673 (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ 674 _Q_INVALIDATE((elm)->field.cqe_prev); \ 675 _Q_INVALIDATE((elm)->field.cqe_next); \ 716 #define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } 744 #define UA_assert(ignore) assert(ignore) 749 #define container_of(ptr, type, member) \ 750 (type *)((uintptr_t)ptr - offsetof(type,member)) 758 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 759 # define UA_THREAD_LOCAL _Thread_local 760 #elif defined(__GNUC__) 761 # define UA_THREAD_LOCAL __thread 762 #elif defined(_MSC_VER) 763 # define UA_THREAD_LOCAL __declspec(thread) 765 # warning The compiler does not support thread-local variables 766 # define UA_THREAD_LOCAL 788 #ifndef UA_ENABLE_MULTITHREADING 789 # define UA_atomic_sync() 792 # define UA_atomic_sync() _ReadWriteBarrier() 794 # define UA_atomic_sync() __sync_synchronize() 799 UA_atomic_xchg(
void *
volatile * addr,
void *newptr) {
800 #ifndef UA_ENABLE_MULTITHREADING 806 return _InterlockedExchangePointer(addr, newptr);
808 return __sync_lock_test_and_set(addr, newptr);
814 UA_atomic_cmpxchg(
void *
volatile * addr,
void *expected,
void *newptr) {
815 #ifndef UA_ENABLE_MULTITHREADING 817 if(old == expected) {
823 return _InterlockedCompareExchangePointer(addr, expected, newptr);
825 return __sync_val_compare_and_swap(addr, expected, newptr);
831 UA_atomic_add(
volatile uint32_t *addr, uint32_t increase) {
832 #ifndef UA_ENABLE_MULTITHREADING 837 return _InterlockedExchangeAdd(addr, increase) + increase;
839 return __sync_add_and_fetch(addr, increase);
2518 #define UA_TRANSPORT_COUNT 12 2530 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY 0 2542 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER 1 2557 #define UA_TRANSPORT_TCPHELLOMESSAGE 2 2568 #define UA_TRANSPORT_TCPERRORMESSAGE 3 2585 #define UA_TRANSPORT_MESSAGETYPE 4 2597 #define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER 5 2611 #define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE 6 2622 #define UA_TRANSPORT_SEQUENCEHEADER 7 2633 #define UA_TRANSPORT_TCPMESSAGEHEADER 8 2647 #define UA_TRANSPORT_CHUNKTYPE 9 2657 #define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER 10 2668 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER 11 2686 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2687 # pragma GCC diagnostic push 2688 # pragma GCC diagnostic ignored "-Wmissing-field-initializers" 2689 # pragma GCC diagnostic ignored "-Wmissing-braces" 2700 UA_SecureConversationMessageAbortBody_new(
void) {
2726 UA_SecureConversationMessageFooter_new(
void) {
2752 UA_TcpHelloMessage_new(
void) {
2778 UA_TcpErrorMessage_new(
void) {
2804 UA_MessageType_new(
void) {
2829 UA_AsymmetricAlgorithmSecurityHeader_new(
void) {
2855 UA_TcpAcknowledgeMessage_new(
void) {
2880 UA_SequenceHeader_new(
void) {
2905 UA_TcpMessageHeader_new(
void) {
2930 UA_ChunkType_new(
void) {
2955 UA_SymmetricAlgorithmSecurityHeader_new(
void) {
2980 UA_SecureConversationMessageHeader_new(
void) {
2998 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2999 # pragma GCC diagnostic pop 3195 const char ** port,
const char ** path);
3257 const void *content,
const UA_DataType *contentType);
3276 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3277 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3278 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \ 3279 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3281 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3282 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3283 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3284 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3286 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3287 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3288 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3289 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3291 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3292 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3293 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3294 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3296 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3297 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3298 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3299 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3301 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3302 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3303 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3304 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3356 #define UA_NODE_BASEATTRIBUTES \ 3358 UA_NodeClass nodeClass; \ 3359 UA_QualifiedName browseName; \ 3360 UA_LocalizedText displayName; \ 3361 UA_LocalizedText description; \ 3362 UA_UInt32 writeMask; \ 3363 UA_UInt32 userWriteMask; \ 3364 size_t referencesSize; \ 3365 UA_ReferenceNode *references; 3443 #define UA_NODE_VARIABLEATTRIBUTES \ 3445 UA_NodeId dataType; \ 3446 UA_Int32 valueRank; \ 3447 size_t arrayDimensionsSize; \ 3448 UA_UInt32 *arrayDimensions; \ 3451 UA_ValueSource valueSource; \ 3454 UA_DataValue value; \ 3455 UA_ValueCallback callback; \ 3457 UA_DataSource dataSource; \ 3704 #define UA_MAXCONTINUATIONPOINTS 5 3717 #ifdef UA_ENABLE_SUBSCRIPTIONS 3718 typedef struct UA_PublishResponseEntry {
3722 } UA_PublishResponseEntry;
3738 #ifdef UA_ENABLE_SUBSCRIPTIONS 3741 SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
3755 #ifdef UA_ENABLE_SUBSCRIPTIONS 3766 UA_Session_getUniqueSubscriptionID(
UA_Session *session);
3773 #define UA_LOG_TRACE_SESSION(LOGGER, SESSION, MSG, ...) \ 3774 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3775 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3776 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3777 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3780 #define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG, ...) \ 3781 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3782 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3783 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3784 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3787 #define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG, ...) \ 3788 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3789 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3790 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3791 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3794 #define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG, ...) \ 3795 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3796 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3797 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3798 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3801 #define UA_LOG_ERROR_SESSION(LOGGER, SESSION, MSG, ...) \ 3802 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3803 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3804 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3805 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3808 #define UA_LOG_FATAL_SESSION(LOGGER, SESSION, MSG, ...) \ 3809 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3810 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3811 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3812 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3907 UA_SubscriptionState
state;
3987 #define UA_NodeStore_newObjectNode() \ 3988 (UA_ObjectNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECT) 3989 #define UA_NodeStore_newMethodNode() \ 3990 (UA_MethodNode*)UA_NodeStore_newNode(UA_NODECLASS_METHOD) 3991 #define UA_NodeStore_newObjectTypeNode() \ 3992 (UA_ObjectTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECTTYPE) 3993 #define UA_NodeStore_newVariableTypeNode() \ 3994 (UA_VariableTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLETYPE) 3995 #define UA_NodeStore_newReferenceTypeNode() \ 3996 (UA_ReferenceTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_REFERENCETYPE) 3997 #define UA_NodeStore_newDataTypeNode() \ 3998 (UA_DataTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_DATATYPE) 3999 #define UA_NodeStore_newViewNode() \ 4000 (UA_ViewNode*)UA_NodeStore_newNode(UA_NODECLASS_VIEW) 4005 UA_NodeStore_newVariableNode(
void) {
4155 #define ANONYMOUS_POLICY "open62541-anonymous-policy" 4156 #define USERNAME_POLICY "open62541-username-policy" 4163 #ifdef UA_ENABLE_MULTITHREADING 4164 # define _LGPL_SOURCE 4166 # include <urcu/lfstack.h> 4168 # define UA_RCU_LOCK() rcu_read_lock() 4169 # define UA_RCU_UNLOCK() rcu_read_unlock() 4170 # define UA_ASSERT_RCU_LOCKED() 4171 # define UA_ASSERT_RCU_UNLOCKED() 4174 # define UA_ASSERT_RCU_LOCKED() assert(rcu_locked) 4175 # define UA_ASSERT_RCU_UNLOCKED() assert(!rcu_locked) 4176 # define UA_RCU_LOCK() do { \ 4177 UA_ASSERT_RCU_UNLOCKED(); \ 4178 rcu_locked = true; \ 4179 rcu_read_lock(); } while(0) 4180 # define UA_RCU_UNLOCK() do { \ 4181 UA_ASSERT_RCU_LOCKED(); \ 4182 rcu_locked = false; \ 4183 rcu_read_unlock(); } while(0) 4186 # define UA_RCU_LOCK() 4187 # define UA_RCU_UNLOCK() 4188 # define UA_ASSERT_RCU_LOCKED() 4189 # define UA_ASSERT_RCU_UNLOCKED() 4193 #ifdef UA_ENABLE_MULTITHREADING 4199 char padding[64 -
sizeof(
void*) -
sizeof(pthread_t) -
4204 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 4229 #ifndef UA_ENABLE_MULTITHREADING 4233 struct cds_wfcq_head dispatchQueue_head;
4235 struct cds_lfs_stack mainLoopJobs;
4237 struct DelayedJobs *delayedJobs;
4238 pthread_cond_t dispatchQueue_condition;
4239 pthread_mutex_t dispatchQueue_mutex;
4240 struct cds_wfcq_tail dispatchQueue_tail;
4280 UA_InstantiationCallback *instantiationCallback,
4307 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize);
4313 size_t referenceTypeIdsSize);
4316 getNodeType(UA_Server *server,
const UA_Node *node);
4327 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
4337 const UA_UInt32 *constraintArrayDimensions,
4338 size_t testArrayDimensionsSize,
4404 const void *request,
void *response);
4458 UA_Session *session,
4559 void Service_Read(UA_Server *server, UA_Session *session,
4586 void Service_Call(UA_Server *server, UA_Session *session,
4686 #ifdef UA_ENABLE_SUBSCRIPTIONS 4688 typedef struct UA_Client_NotificationsAckNumber {
4689 LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
4691 } UA_Client_NotificationsAckNumber;
4693 typedef struct UA_Client_MonitoredItem {
4694 LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
4704 void *handlerContext;
4705 } UA_Client_MonitoredItem;
4707 typedef struct UA_Client_Subscription {
4708 LIST_ENTRY(UA_Client_Subscription) listEntry;
4715 LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
4716 } UA_Client_Subscription;
4718 void UA_Client_Subscriptions_forceDelete(
UA_Client *client, UA_Client_Subscription *sub);
4756 #ifdef UA_ENABLE_SUBSCRIPTIONS 4758 LIST_HEAD(ListOfUnacknowledgedNotifications, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
4759 LIST_HEAD(ListOfClientSubscriptionItems, UA_Client_Subscription) subscriptions;
4819 static void deleteMembers_noInit(
void *p,
const UA_DataType *type);
4825 size_t length = strlen(src);
4833 memcpy(str.
data, src, length);
4844 return (is == 0) ? true :
false;
4862 time_t secSinceUnixEpoch =
4865 memset(&ts, 0,
sizeof(
struct tm));
4873 return dateTimeStruct;
4878 for(
size_t i = digits; i > 0; --i) {
4879 pos[i-1] = (
UA_Byte)((n % 10) +
'0');
4894 printNumber(tSt.
day, &str.
data[3], 2);
4896 printNumber(tSt.
year, &str.
data[6], 4);
4898 printNumber(tSt.
hour, &str.
data[11], 2);
4900 printNumber(tSt.
min, &str.
data[14], 2);
4902 printNumber(tSt.
sec, &str.
data[17], 2);
4915 if(memcmp(g1, g2,
sizeof(
UA_Guid)) == 0)
4943 UA_ByteString_init(bs);
5041 #define FNV_PRIME_32 16777619 5044 for(
size_t i = 0; i < size; ++i) {
5045 fnv = fnv ^ (buf[i]);
5068 NodeId_deleteMembers(&p->
nodeId, _);
5146 if(UA_Variant_isScalar(src))
5219 size_t *total,
size_t *block,
size_t *stride,
size_t *first) {
5221 #if(MAX_SIZE > 0xffffffff) 5230 size_t dims_count = 1;
5232 size_t elements = 1;
5235 for(
size_t i = 0; i < dims_count; ++i)
5236 elements *= dims[i];
5252 for(
size_t i = 0; i < dims_count; ++i) {
5261 realmax[i] = dims[i] - 1;
5272 size_t running_dimssize = 1;
5274 for(
size_t k = dims_count; k > 0;) {
5277 if(!found_contiguous && dimrange != dims[k]) {
5279 found_contiguous =
true;
5280 *block = running_dimssize * dimrange;
5281 *stride = running_dimssize * dims[k];
5284 running_dimssize *= dims[k];
5310 length = dim->
max - dim->
min + 1;
5325 UA_Boolean isScalar = UA_Variant_isScalar(src);
5357 size_t count, block, stride, first;
5358 UA_StatusCode retval = computeStrides(src, thisrange, &count,
5359 &block, &stride, &first);
5364 UA_Variant_init(dst);
5370 size_t block_count = count / block;
5372 uintptr_t nextdst = (uintptr_t)dst->
data;
5373 uintptr_t nextsrc = (uintptr_t)src->
data + (elem_size * first);
5377 for(
size_t i = 0; i < block_count; ++i) {
5378 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5379 nextdst += block * elem_size;
5380 nextsrc += stride * elem_size;
5383 for(
size_t i = 0; i < block_count; ++i) {
5384 for(
size_t j = 0; j < block; ++j) {
5385 retval =
UA_copy((
const void*)nextsrc,
5386 (
void*)nextdst, src->
type);
5387 nextdst += elem_size;
5388 nextsrc += elem_size;
5390 nextsrc += (stride - block) * elem_size;
5404 for(
size_t i = 0; i < block_count; ++i) {
5407 retval = copySubString((
const UA_String*)nextsrc,
5414 nextdst += elem_size;
5415 nextsrc += elem_size;
5417 nextsrc += (stride - block) * elem_size;
5439 Variant_deletemembers(dst,
NULL);
5453 Variant_setRange(
UA_Variant *v,
void *array,
size_t arraySize,
5456 size_t count, block, stride, first;
5458 &block, &stride, &first);
5461 if(count != arraySize)
5465 size_t block_count = count / block;
5467 uintptr_t nextdst = (uintptr_t)v->
data + (first * elem_size);
5468 uintptr_t nextsrc = (uintptr_t)array;
5470 for(
size_t i = 0; i < block_count; ++i) {
5471 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5472 nextsrc += block * elem_size;
5473 nextdst += stride * elem_size;
5476 for(
size_t i = 0; i < block_count; ++i) {
5477 for(
size_t j = 0; j < block; ++j) {
5478 deleteMembers_noInit((
void*)nextdst, v->
type);
5479 retval |=
UA_copy((
void*)nextsrc, (
void*)nextdst, v->
type);
5480 nextdst += elem_size;
5481 nextsrc += elem_size;
5483 nextdst += (stride - block) * elem_size;
5489 memset(array, 0,
sizeof(elem_size)*arraySize);
5497 return Variant_setRange(v, array, arraySize, range,
false);
5503 return Variant_setRange(v, (
void*)(uintptr_t)array,
5504 arraySize, range,
true);
5511 String_deleteMembers(&p->
text,
NULL);
5518 retval |= UA_String_copy(&src->
text, &dst->
text);
5532 UA_Variant_init(&dst->
value);
5535 DataValue_deleteMembers(dst,
NULL);
5645 copy_noInit(
const void *src,
void *dst,
const UA_DataType *type) {
5647 uintptr_t ptrs = (uintptr_t)src;
5648 uintptr_t ptrd = (uintptr_t)dst;
5650 for(
size_t i = 0; i < membersSize; ++i) {
5658 retval |= copyJumpTable[fi]((
const void*)ptrs, (
void*)ptrd, mt);
5664 size_t *dst_size = (
size_t*)ptrd;
5665 const size_t size = *((
const size_t*)ptrs);
5666 ptrs +=
sizeof(size_t);
5667 ptrd +=
sizeof(size_t);
5668 retval |=
UA_Array_copy(*(
void*
const*)ptrs, size, (
void**)ptrd, mt);
5673 ptrs +=
sizeof(
void*);
5674 ptrd +=
sizeof(
void*);
5682 memset(dst, 0, type->
memSize);
5689 static void nopDeleteMembers(
void *p,
const UA_DataType *type) { }
5724 deleteMembers_noInit(
void *p,
const UA_DataType *type) {
5725 uintptr_t ptr = (uintptr_t)p;
5727 for(
size_t i = 0; i < membersSize; ++i) {
5734 deleteMembersJumpTable[fi]((
void*)ptr, mt);
5738 size_t length = *(
size_t*)ptr;
5739 ptr +=
sizeof(size_t);
5741 ptr +=
sizeof(
void*);
5748 deleteMembers_noInit(p, type);
5754 deleteMembers_noInit(p, type);
5789 memcpy(*dst, src, type->
memSize * size);
5793 uintptr_t ptrs = (uintptr_t)src;
5794 uintptr_t ptrd = (uintptr_t)*dst;
5796 for(
size_t i = 0; i < size; ++i) {
5797 retval |=
UA_copy((
void*)ptrs, (
void*)ptrd, type);
5811 uintptr_t ptr = (uintptr_t)p;
5812 for(
size_t i = 0; i < size; ++i) {
5842 #if defined(__clang__) 5843 # pragma GCC diagnostic push 5844 # pragma GCC diagnostic warning "-W#warnings" 5847 #ifndef UA_BINARY_OVERLAYABLE_INTEGER 5848 # warning Integer endianness could not be detected to be little endian. Use slow generic encoding. 5853 #ifndef UA_BINARY_OVERLAYABLE_FLOAT 5854 # warning Float endianness could not be detected to be little endian in the IEEE 754 format. Use slow generic encoding. 5857 #if defined(__clang__) 5858 # pragma GCC diagnostic pop 5906 exchangeBuffer(
void) {
5907 if(!g_exchangeBufferCallback)
5912 void *store_exchangeBufferCallbackHandle = g_exchangeBufferCallbackHandle;
5914 size_t offset = (uintptr_t)(g_pos - g_buf.data);
5916 status ret = g_exchangeBufferCallback(g_exchangeBufferCallbackHandle, &buf, offset);
5919 g_exchangeBufferCallback = store_exchangeBufferCallback;
5920 g_exchangeBufferCallbackHandle = store_exchangeBufferCallbackHandle;
5931 #if !UA_BINARY_OVERLAYABLE_INTEGER 5935 UA_encode16(
const u16 v,
u8 buf[2]) {
5937 buf[1] = (
u8)(v >> 8);
5941 UA_decode16(
const u8 buf[2],
u16 *v) {
5942 *v = (
u16)((
u16)buf[0] + (((
u16)buf[1]) << 8));
5946 UA_encode32(
const u32 v,
u8 buf[4]) {
5948 buf[1] = (
u8)(v >> 8);
5949 buf[2] = (
u8)(v >> 16);
5950 buf[3] = (
u8)(v >> 24);
5954 UA_decode32(
const u8 buf[4],
u32 *v) {
5956 (((
u32)buf[1]) << 8) +
5957 (((
u32)buf[2]) << 16) +
5958 (((
u32)buf[3]) << 24));
5962 UA_encode64(
const u64 v,
u8 buf[8]) {
5964 buf[1] = (
u8)(v >> 8);
5965 buf[2] = (
u8)(v >> 16);
5966 buf[3] = (
u8)(v >> 24);
5967 buf[4] = (
u8)(v >> 32);
5968 buf[5] = (
u8)(v >> 40);
5969 buf[6] = (
u8)(v >> 48);
5970 buf[7] = (
u8)(v >> 56);
5974 UA_decode64(
const u8 buf[8],
u64 *v) {
5976 (((
u64)buf[1]) << 8) +
5977 (((
u64)buf[2]) << 16) +
5978 (((
u64)buf[3]) << 24) +
5979 (((
u64)buf[4]) << 32) +
5980 (((
u64)buf[5]) << 40) +
5981 (((
u64)buf[6]) << 48) +
5982 (((
u64)buf[7]) << 56));
5989 Boolean_encodeBinary(
const bool *src,
const UA_DataType *_) {
5990 if(g_pos +
sizeof(
bool) > g_end)
5992 *g_pos = *(
const u8*)src;
5998 Boolean_decodeBinary(
bool *dst,
const UA_DataType *_) {
5999 if(g_pos +
sizeof(
bool) > g_end)
6001 *dst = (*g_pos > 0) ?
true :
false;
6009 if(g_pos +
sizeof(
u8) > g_end)
6011 *g_pos = *(
const u8*)src;
6018 if(g_pos +
sizeof(
u8) > g_end)
6028 if(g_pos +
sizeof(
u16) > g_end)
6030 #if UA_BINARY_OVERLAYABLE_INTEGER 6031 memcpy(g_pos, src,
sizeof(
u16));
6033 UA_encode16(*src, g_pos);
6041 if(g_pos +
sizeof(
u16) > g_end)
6043 #if UA_BINARY_OVERLAYABLE_INTEGER 6044 memcpy(dst, g_pos,
sizeof(
u16));
6046 UA_decode16(g_pos, dst);
6055 if(g_pos +
sizeof(
u32) > g_end)
6057 #if UA_BINARY_OVERLAYABLE_INTEGER 6058 memcpy(g_pos, src,
sizeof(
u32));
6060 UA_encode32(*src, g_pos);
6067 Int32_encodeBinary(
i32 const *src) {
6068 return UInt32_encodeBinary((
const u32*)src,
NULL);
6073 if(g_pos +
sizeof(
u32) > g_end)
6075 #if UA_BINARY_OVERLAYABLE_INTEGER 6076 memcpy(dst, g_pos,
sizeof(
u32));
6078 UA_decode32(g_pos, dst);
6085 Int32_decodeBinary(
i32 *dst) {
6086 return UInt32_decodeBinary((
u32*)dst,
NULL);
6090 StatusCode_decodeBinary(
status *dst) {
6091 return UInt32_decodeBinary((
u32*)dst,
NULL);
6097 if(g_pos +
sizeof(
u64) > g_end)
6099 #if UA_BINARY_OVERLAYABLE_INTEGER 6100 memcpy(g_pos, src,
sizeof(
u64));
6102 UA_encode64(*src, g_pos);
6110 if(g_pos +
sizeof(
u64) > g_end)
6112 #if UA_BINARY_OVERLAYABLE_INTEGER 6113 memcpy(dst, g_pos,
sizeof(
u64));
6115 UA_decode64(g_pos, dst);
6123 return UInt64_decodeBinary((
u64*)dst,
NULL);
6130 #if UA_BINARY_OVERLAYABLE_FLOAT 6131 # define Float_encodeBinary UInt32_encodeBinary 6132 # define Float_decodeBinary UInt32_decodeBinary 6133 # define Double_encodeBinary UInt64_encodeBinary 6134 # define Double_decodeBinary UInt64_decodeBinary 6143 pack754(
long double f,
unsigned bits,
unsigned expbits) {
6144 unsigned significandbits = bits - expbits - 1;
6147 if (f < 0) { sign = 1; fnorm = -f; }
6148 else { sign = 0; fnorm = f; }
6150 while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
6151 while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
6152 fnorm = fnorm - 1.0;
6153 long long significand = (
long long)(fnorm * ((
float)(1LL<<significandbits) + 0.5f));
6154 long long exponent = shift + ((1<<(expbits-1)) - 1);
6155 return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
6159 unpack754(uint64_t i,
unsigned bits,
unsigned expbits) {
6160 unsigned significandbits = bits - expbits - 1;
6161 long double result = (
long double)(i&(uint64_t)((1LL<<significandbits)-1));
6162 result /= (1LL<<significandbits);
6164 unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
6165 long long shift = (
long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
6166 while(shift > 0) { result *= 2.0; --shift; }
6167 while(shift < 0) { result /= 2.0; ++shift; }
6168 result *= ((i>>(bits-1))&1)? -1.0: 1.0;
6173 #define FLOAT_NAN 0xffc00000 6174 #define FLOAT_INF 0x7f800000 6175 #define FLOAT_NEG_INF 0xff800000 6176 #define FLOAT_NEG_ZERO 0x80000000 6187 else encoded = (
u32)pack754(f, 32, 8);
6188 return UInt32_encodeBinary(&encoded,
NULL);
6194 status ret = UInt32_decodeBinary(&decoded,
NULL);
6197 if(decoded == 0) *dst = 0.0f;
6199 else if(decoded ==
FLOAT_INF) *dst = INFINITY;
6201 else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
6202 (decoded >= 0xff800001 && decoded <= 0xffffffff)) *dst = NAN;
6203 else *dst = (
UA_Float)unpack754(decoded, 32, 8);
6208 #define DOUBLE_NAN 0xfff8000000000000L 6209 #define DOUBLE_INF 0x7ff0000000000000L 6210 #define DOUBLE_NEG_INF 0xfff0000000000000L 6211 #define DOUBLE_NEG_ZERO 0x8000000000000000L 6222 else encoded = pack754(d, 64, 11);
6223 return UInt64_encodeBinary(&encoded,
NULL);
6229 status ret = UInt64_decodeBinary(&decoded,
NULL);
6232 if(decoded == 0) *dst = 0.0;
6234 else if(decoded ==
DOUBLE_INF) *dst = INFINITY;
6237 else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
6238 (decoded >= 0xfff0000000000001L && decoded <= 0xffffffffffffffffL)) *dst = NAN;
6239 else *dst = (
UA_Double)unpack754(decoded, 64, 11);
6248 encodeNumericWithExchangeBuffer(
const void *ptr,
6252 ret = exchangeBuffer();
6255 encodeFunc(ptr,
NULL);
6263 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type);
6270 Array_encodeBinaryOverlayable(uintptr_t ptr,
size_t length,
size_t elementMemSize) {
6272 size_t finished = 0;
6275 while(g_end < g_pos + (elementMemSize * (length-finished))) {
6276 size_t possible = ((uintptr_t)g_end - (uintptr_t)g_pos) / (
sizeof(
u8) * elementMemSize);
6277 size_t possibleMem = possible * elementMemSize;
6278 memcpy(g_pos, (
void*)ptr, possibleMem);
6279 g_pos += possibleMem;
6281 finished += possible;
6282 status ret = exchangeBuffer();
6288 memcpy(g_pos, (
void*)ptr, elementMemSize * (length-finished));
6289 g_pos += elementMemSize * (length-finished);
6294 Array_encodeBinaryComplex(uintptr_t ptr,
size_t length,
const UA_DataType *type) {
6301 for(
size_t i = 0; i < length; ++i) {
6303 status ret = encodeType((
const void*)ptr, type);
6309 ret = exchangeBuffer();
6322 Array_encodeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
6324 i32 signed_length = -1;
6328 signed_length = (
i32)length;
6333 status ret = encodeNumericWithExchangeBuffer(&signed_length,
6342 return Array_encodeBinaryComplex((uintptr_t)src, length, type);
6343 return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->
memSize);
6351 status ret = Int32_decodeBinary(&signed_length);
6356 if(signed_length <= 0) {
6358 if(signed_length < 0)
6368 size_t length = (size_t)signed_length;
6369 if(g_pos + ((type->
memSize * length) / 32) > g_end)
6379 if(g_end < g_pos + (type->
memSize * length)) {
6384 memcpy(*dst, g_pos, type->
memSize * length);
6385 g_pos += type->
memSize * length;
6388 uintptr_t ptr = (uintptr_t)*dst;
6390 for(
size_t i = 0; i < length; ++i) {
6391 ret = decodeBinaryJumpTable[decode_index]((
void*)ptr, type);
6401 *out_length = length;
6433 ret |= UInt16_encodeBinary(&src->
data2,
NULL);
6434 ret |= UInt16_encodeBinary(&src->
data3,
NULL);
6435 if(g_pos + (8*
sizeof(
u8)) > g_end)
6437 memcpy(g_pos, src->
data4, 8*
sizeof(
u8));
6445 ret |= UInt16_decodeBinary(&dst->
data2,
NULL);
6446 ret |= UInt16_decodeBinary(&dst->
data3,
NULL);
6447 if(g_pos + (8*
sizeof(
u8)) > g_end)
6449 memcpy(dst->
data4, g_pos, 8*
sizeof(
u8));
6455 #define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0 6456 #define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1 6457 #define UA_NODEIDTYPE_NUMERIC_COMPLETE 2 6459 #define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40 6460 #define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80 6466 NodeId_encodeBinaryWithEncodingMask(
UA_NodeId const *src,
u8 encoding) {
6472 ret |= Byte_encodeBinary(&encoding,
NULL);
6477 ret |= Byte_encodeBinary(&encoding,
NULL);
6479 ret |= Byte_encodeBinary(&nsindex,
NULL);
6481 ret |= UInt16_encodeBinary(&identifier16,
NULL);
6484 ret |= Byte_encodeBinary(&encoding,
NULL);
6486 ret |= Byte_encodeBinary(&identifier8,
NULL);
6491 ret |= Byte_encodeBinary(&encoding,
NULL);
6499 ret |= Byte_encodeBinary(&encoding,
NULL);
6505 ret |= Byte_encodeBinary(&encoding,
NULL);
6519 return NodeId_encodeBinaryWithEncodingMask(src, 0);
6524 u8 dstByte = 0, encodingByte = 0;
6528 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6537 switch (encodingByte) {
6540 ret = Byte_decodeBinary(&dstByte,
NULL);
6546 ret |= Byte_decodeBinary(&dstByte,
NULL);
6548 ret |= UInt16_decodeBinary(&dstUInt16,
NULL);
6589 status ret = NodeId_encodeBinaryWithEncodingMask(&src->
nodeId, encoding);
6604 ret = encodeNumericWithExchangeBuffer(&src->
serverIndex,
6615 u8 encoding = *g_pos;
6633 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01 6634 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02 6646 status ret = Byte_encodeBinary(&encoding,
NULL);
6652 ret |= String_encodeBinary(&src->
locale,
NULL);
6654 ret |= String_encodeBinary(&src->
text,
NULL);
6663 status ret = Byte_decodeBinary(&encoding,
NULL);
6667 ret |= String_decodeBinary(&dst->
locale,
NULL);
6669 ret |= String_decodeBinary(&dst->
text,
NULL);
6676 UA_findDataTypeByBinary(
const UA_NodeId *typeId) {
6701 ret = encodeNumericWithExchangeBuffer(&encoding,
6728 status ret = NodeId_encodeBinary(&typeId,
NULL);
6732 ret |= Byte_encodeBinary(&encoding,
NULL);
6741 i32 signed_len = (
i32)len;
6742 ret |= Int32_encodeBinary(&signed_len);
6755 const UA_DataType *type = UA_findDataTypeByBinary(typeId);
6776 return decodeBinaryJumpTable[decode_index](dst->
content.
decoded.data, type);
6787 UA_NodeId_init(&binTypeId);
6788 status ret = NodeId_decodeBinary(&binTypeId,
NULL);
6789 ret |= Byte_decodeBinary(&encoding,
NULL);
6791 UA_NodeId_deleteMembers(&binTypeId);
6796 ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId);
6797 UA_NodeId_deleteMembers(&binTypeId);
6809 UA_NodeId_deleteMembers(&binTypeId);
6820 Variant_encodeBinaryWrapExtensionObject(
const UA_Variant *src,
const bool isArray) {
6831 ret = Int32_encodeBinary(&encodedLength);
6838 UA_ExtensionObject_init(&eo);
6842 uintptr_t ptr = (uintptr_t)src->
data;
6864 return Byte_encodeBinary(&encoding,
NULL);
6883 status ret = Byte_encodeBinary(&encoding,
NULL);
6889 ret = Variant_encodeBinaryWrapExtensionObject(src, isArray);
6891 ret = UA_encodeBinaryInternal(src->
data, src->
type);
6903 Variant_decodeBinaryUnwrapExtensionObject(
UA_Variant *dst) {
6906 u8 *old_pos = g_pos;
6910 UA_NodeId_init(&typeId);
6911 status ret = NodeId_decodeBinary(&typeId,
NULL);
6917 ret = Byte_decodeBinary(&encoding,
NULL);
6919 UA_NodeId_deleteMembers(&typeId);
6925 (dst->
type = UA_findDataTypeByBinary(&typeId)) !=
NULL) {
6932 UA_NodeId_deleteMembers(&typeId);
6942 return decodeBinaryJumpTable[decode_index](dst->
data, dst->
type);
6950 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6955 if(encodingByte == 0)
6977 ret = decodeBinaryJumpTable[typeIndex](dst->
data, dst->
type);
6979 ret = Variant_decodeBinaryUnwrapExtensionObject(dst);
6993 u8 encodingMask = (
u8)
7002 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7010 ret = Variant_encodeBinary(&src->
value,
NULL);
7016 ret |= encodeNumericWithExchangeBuffer(&src->
status,
7034 #define MAX_PICO_SECONDS 9999 7040 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7045 if(encodingMask & 0x01) {
7047 ret |= Variant_decodeBinary(&dst->
value,
NULL);
7049 if(encodingMask & 0x02) {
7051 ret |= StatusCode_decodeBinary(&dst->
status);
7053 if(encodingMask & 0x04) {
7057 if(encodingMask & 0x10) {
7063 if(encodingMask & 0x08) {
7067 if(encodingMask & 0x20) {
7080 u8 encodingMask = (
u8)
7086 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7094 ret |= Int32_encodeBinary(&src->
locale);
7130 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7135 if(encodingMask & 0x01) {
7139 if(encodingMask & 0x02) {
7143 if(encodingMask & 0x04) {
7147 if(encodingMask & 0x08) {
7149 ret |= Int32_decodeBinary(&dst->
locale);
7151 if(encodingMask & 0x10) {
7155 if(encodingMask & 0x20) {
7159 if(encodingMask & 0x40) {
7176 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type);
7208 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type) {
7209 uintptr_t ptr = (uintptr_t)src;
7219 size_t memSize = membertype->
memSize;
7221 ret = encodeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7225 ret = exchangeBuffer();
7226 ptr -= member->
padding + memSize;
7235 const size_t length = *((
const size_t*)ptr);
7236 ptr +=
sizeof(size_t);
7237 ret = Array_encodeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7238 ptr +=
sizeof(
void*);
7251 g_pos = &dst->
data[*offset];
7253 g_exchangeBufferCallback = exchangeCallback;
7254 g_exchangeBufferCallbackHandle = exchangeHandle;
7255 status ret = UA_encodeBinaryInternal(src, type);
7260 *offset = (uintptr_t)(g_pos - g_buf.data);
7294 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type) {
7295 uintptr_t ptr = (uintptr_t)dst;
7305 size_t memSize = membertype->
memSize;
7306 ret |= decodeBinaryJumpTable[fi]((
void *
UA_RESTRICT)ptr, membertype);
7310 size_t *length = (
size_t*)ptr;
7311 ptr +=
sizeof(size_t);
7313 ptr +=
sizeof(
void*);
7323 memset(dst, 0, type->
memSize);
7327 g_pos = &src->
data[*offset];
7331 status ret = UA_decodeBinaryInternal(dst, type);
7335 *offset = (size_t)(g_pos - src->
data) /
sizeof(
u8);
7346 Array_calcSizeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
7352 uintptr_t ptr = (uintptr_t)src;
7354 for(
size_t i = 0; i < length; ++i) {
7355 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, type);
7368 return 4 + p->length;
7379 switch (src->identifierType) {
7383 }
else if(src->identifier.numeric >
UA_BYTE_MAX || src->namespaceIndex > 0) {
7392 s += String_calcSizeBinary(&src->identifier.string,
NULL);
7405 size_t s = NodeId_calcSizeBinary(&src->
nodeId,
NULL);
7417 s += String_calcSizeBinary(&src->
locale,
NULL);
7419 s += String_calcSizeBinary(&src->
text,
NULL);
7435 s += calcSizeBinaryJumpTable[encode_index](src->
content.
decoded.data, type);
7463 UA_NodeId_init(&typeId);
7478 uintptr_t ptr = (uintptr_t)src->
data;
7480 for(
size_t i = 0; i < length; ++i) {
7483 s += NodeId_calcSizeBinary(&typeId,
NULL);
7486 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, src->
type);
7500 s += Variant_calcSizeBinary(&src->
value,
NULL);
7566 uintptr_t ptr = (uintptr_t)p;
7569 for(
size_t i = 0; i < membersSize; ++i) {
7575 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7579 const size_t length = *((
const size_t*)ptr);
7580 ptr +=
sizeof(size_t);
7581 s += Array_calcSizeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7582 ptr +=
sizeof(
void*);
7597 #ifdef UA_ENABLE_TYPENAMES 7600 .namespaceZero =
true,
7608 #ifdef UA_ENABLE_TYPENAMES 7611 .namespaceZero =
true,
7619 #ifdef UA_ENABLE_TYPENAMES 7622 .namespaceZero =
true,
7630 #ifdef UA_ENABLE_TYPENAMES 7633 .namespaceZero =
true,
7641 #ifdef UA_ENABLE_TYPENAMES 7644 .namespaceZero =
true,
7652 #ifdef UA_ENABLE_TYPENAMES 7655 .namespaceZero =
true,
7663 #ifdef UA_ENABLE_TYPENAMES 7666 .namespaceZero =
true,
7674 #ifdef UA_ENABLE_TYPENAMES 7677 .namespaceZero =
true,
7685 #ifdef UA_ENABLE_TYPENAMES 7688 .namespaceZero =
true,
7696 #ifdef UA_ENABLE_TYPENAMES 7699 .namespaceZero =
true,
7707 #ifdef UA_ENABLE_TYPENAMES 7710 .namespaceZero =
true,
7718 #ifdef UA_ENABLE_TYPENAMES 7721 .namespaceZero =
true,
7729 #ifdef UA_ENABLE_TYPENAMES 7732 .namespaceZero =
true,
7740 #ifdef UA_ENABLE_TYPENAMES 7743 .namespaceZero =
true,
7751 #ifdef UA_ENABLE_TYPENAMES 7754 .namespaceZero =
true,
7762 #ifdef UA_ENABLE_TYPENAMES 7765 .namespaceZero =
true,
7773 #ifdef UA_ENABLE_TYPENAMES 7776 .namespaceZero =
true,
7784 #ifdef UA_ENABLE_TYPENAMES 7787 .namespaceZero =
true,
7795 #ifdef UA_ENABLE_TYPENAMES 7798 .namespaceZero =
true,
7806 #ifdef UA_ENABLE_TYPENAMES 7807 .memberName =
"namespaceIndex",
7809 .namespaceZero =
true,
7814 #ifdef UA_ENABLE_TYPENAMES 7815 .memberName =
"name",
7817 .namespaceZero =
true,
7825 #ifdef UA_ENABLE_TYPENAMES 7828 .namespaceZero =
true,
7836 #ifdef UA_ENABLE_TYPENAMES 7839 .namespaceZero =
true,
7847 #ifdef UA_ENABLE_TYPENAMES 7850 .namespaceZero =
true,
7858 #ifdef UA_ENABLE_TYPENAMES 7861 .namespaceZero =
true,
7869 #ifdef UA_ENABLE_TYPENAMES 7872 .namespaceZero =
true,
7880 #ifdef UA_ENABLE_TYPENAMES 7881 .memberName =
"certificateData",
7883 .namespaceZero =
true,
7888 #ifdef UA_ENABLE_TYPENAMES 7889 .memberName =
"signature",
7891 .namespaceZero =
true,
7899 #ifdef UA_ENABLE_TYPENAMES 7900 .memberName =
"targetId",
7902 .namespaceZero =
true,
7907 #ifdef UA_ENABLE_TYPENAMES 7908 .memberName =
"remainingPathIndex",
7910 .namespaceZero =
true,
7918 #ifdef UA_ENABLE_TYPENAMES 7919 .memberName =
"specifiedAttributes",
7921 .namespaceZero =
true,
7926 #ifdef UA_ENABLE_TYPENAMES 7927 .memberName =
"displayName",
7929 .namespaceZero =
true,
7934 #ifdef UA_ENABLE_TYPENAMES 7935 .memberName =
"description",
7937 .namespaceZero =
true,
7942 #ifdef UA_ENABLE_TYPENAMES 7943 .memberName =
"writeMask",
7945 .namespaceZero =
true,
7950 #ifdef UA_ENABLE_TYPENAMES 7951 .memberName =
"userWriteMask",
7953 .namespaceZero =
true,
7958 #ifdef UA_ENABLE_TYPENAMES 7959 .memberName =
"containsNoLoops",
7961 .namespaceZero =
true,
7966 #ifdef UA_ENABLE_TYPENAMES 7967 .memberName =
"eventNotifier",
7969 .namespaceZero =
true,
7977 #ifdef UA_ENABLE_TYPENAMES 7980 .namespaceZero =
true,
7988 #ifdef UA_ENABLE_TYPENAMES 7989 .memberName =
"authenticationToken",
7991 .namespaceZero =
true,
7996 #ifdef UA_ENABLE_TYPENAMES 7997 .memberName =
"timestamp",
7999 .namespaceZero =
true,
8004 #ifdef UA_ENABLE_TYPENAMES 8005 .memberName =
"requestHandle",
8007 .namespaceZero =
true,
8012 #ifdef UA_ENABLE_TYPENAMES 8013 .memberName =
"returnDiagnostics",
8015 .namespaceZero =
true,
8020 #ifdef UA_ENABLE_TYPENAMES 8021 .memberName =
"auditEntryId",
8023 .namespaceZero =
true,
8028 #ifdef UA_ENABLE_TYPENAMES 8029 .memberName =
"timeoutHint",
8031 .namespaceZero =
true,
8036 #ifdef UA_ENABLE_TYPENAMES 8037 .memberName =
"additionalHeader",
8039 .namespaceZero =
true,
8047 #ifdef UA_ENABLE_TYPENAMES 8048 .memberName =
"statusCode",
8050 .namespaceZero =
true,
8055 #ifdef UA_ENABLE_TYPENAMES 8056 .memberName =
"revisedSamplingInterval",
8058 .namespaceZero =
true,
8063 #ifdef UA_ENABLE_TYPENAMES 8064 .memberName =
"revisedQueueSize",
8066 .namespaceZero =
true,
8071 #ifdef UA_ENABLE_TYPENAMES 8072 .memberName =
"filterResult",
8074 .namespaceZero =
true,
8082 #ifdef UA_ENABLE_TYPENAMES 8083 .memberName =
"requestHeader",
8085 .namespaceZero =
true,
8093 #ifdef UA_ENABLE_TYPENAMES 8094 .memberName =
"statusCode",
8096 .namespaceZero =
true,
8101 #ifdef UA_ENABLE_TYPENAMES 8102 .memberName =
"addedNodeId",
8104 .namespaceZero =
true,
8112 #ifdef UA_ENABLE_TYPENAMES 8113 .memberName =
"specifiedAttributes",
8115 .namespaceZero =
true,
8120 #ifdef UA_ENABLE_TYPENAMES 8121 .memberName =
"displayName",
8123 .namespaceZero =
true,
8128 #ifdef UA_ENABLE_TYPENAMES 8129 .memberName =
"description",
8131 .namespaceZero =
true,
8136 #ifdef UA_ENABLE_TYPENAMES 8137 .memberName =
"writeMask",
8139 .namespaceZero =
true,
8144 #ifdef UA_ENABLE_TYPENAMES 8145 .memberName =
"userWriteMask",
8147 .namespaceZero =
true,
8152 #ifdef UA_ENABLE_TYPENAMES 8153 .memberName =
"value",
8155 .namespaceZero =
true,
8160 #ifdef UA_ENABLE_TYPENAMES 8161 .memberName =
"dataType",
8163 .namespaceZero =
true,
8168 #ifdef UA_ENABLE_TYPENAMES 8169 .memberName =
"valueRank",
8171 .namespaceZero =
true,
8176 #ifdef UA_ENABLE_TYPENAMES 8177 .memberName =
"arrayDimensions",
8179 .namespaceZero =
true,
8184 #ifdef UA_ENABLE_TYPENAMES 8185 .memberName =
"accessLevel",
8187 .namespaceZero =
true,
8192 #ifdef UA_ENABLE_TYPENAMES 8193 .memberName =
"userAccessLevel",
8195 .namespaceZero =
true,
8200 #ifdef UA_ENABLE_TYPENAMES 8201 .memberName =
"minimumSamplingInterval",
8203 .namespaceZero =
true,
8208 #ifdef UA_ENABLE_TYPENAMES 8209 .memberName =
"historizing",
8211 .namespaceZero =
true,
8219 #ifdef UA_ENABLE_TYPENAMES 8220 .memberName =
"sequenceNumber",
8222 .namespaceZero =
true,
8227 #ifdef UA_ENABLE_TYPENAMES 8228 .memberName =
"publishTime",
8230 .namespaceZero =
true,
8235 #ifdef UA_ENABLE_TYPENAMES 8236 .memberName =
"notificationData",
8238 .namespaceZero =
true,
8246 #ifdef UA_ENABLE_TYPENAMES 8249 .namespaceZero =
true,
8257 #ifdef UA_ENABLE_TYPENAMES 8260 .namespaceZero =
true,
8268 #ifdef UA_ENABLE_TYPENAMES 8269 .memberName =
"statusCode",
8271 .namespaceZero =
true,
8276 #ifdef UA_ENABLE_TYPENAMES 8277 .memberName =
"inputArgumentResults",
8279 .namespaceZero =
true,
8284 #ifdef UA_ENABLE_TYPENAMES 8285 .memberName =
"inputArgumentDiagnosticInfos",
8287 .namespaceZero =
true,
8292 #ifdef UA_ENABLE_TYPENAMES 8293 .memberName =
"outputArguments",
8295 .namespaceZero =
true,
8303 #ifdef UA_ENABLE_TYPENAMES 8304 .memberName =
"statusCode",
8306 .namespaceZero =
true,
8311 #ifdef UA_ENABLE_TYPENAMES 8312 .memberName =
"dataStatusCodes",
8314 .namespaceZero =
true,
8319 #ifdef UA_ENABLE_TYPENAMES 8320 .memberName =
"dataDiagnosticInfos",
8322 .namespaceZero =
true,
8330 #ifdef UA_ENABLE_TYPENAMES 8331 .memberName =
"referenceTypeId",
8333 .namespaceZero =
true,
8338 #ifdef UA_ENABLE_TYPENAMES 8339 .memberName =
"isInverse",
8341 .namespaceZero =
true,
8346 #ifdef UA_ENABLE_TYPENAMES 8347 .memberName =
"includeSubtypes",
8349 .namespaceZero =
true,
8354 #ifdef UA_ENABLE_TYPENAMES 8355 .memberName =
"targetName",
8357 .namespaceZero =
true,
8365 #ifdef UA_ENABLE_TYPENAMES 8368 .namespaceZero =
true,
8376 #ifdef UA_ENABLE_TYPENAMES 8377 .memberName =
"objectId",
8379 .namespaceZero =
true,
8384 #ifdef UA_ENABLE_TYPENAMES 8385 .memberName =
"methodId",
8387 .namespaceZero =
true,
8392 #ifdef UA_ENABLE_TYPENAMES 8393 .memberName =
"inputArguments",
8395 .namespaceZero =
true,
8403 #ifdef UA_ENABLE_TYPENAMES 8404 .memberName =
"requestHeader",
8406 .namespaceZero =
true,
8411 #ifdef UA_ENABLE_TYPENAMES 8412 .memberName =
"nodesToUnregister",
8414 .namespaceZero =
true,
8422 #ifdef UA_ENABLE_TYPENAMES 8423 .memberName =
"statusCode",
8425 .namespaceZero =
true,
8430 #ifdef UA_ENABLE_TYPENAMES 8431 .memberName =
"operandStatusCodes",
8433 .namespaceZero =
true,
8438 #ifdef UA_ENABLE_TYPENAMES 8439 .memberName =
"operandDiagnosticInfos",
8441 .namespaceZero =
true,
8449 #ifdef UA_ENABLE_TYPENAMES 8450 .memberName =
"nodeId",
8452 .namespaceZero =
true,
8457 #ifdef UA_ENABLE_TYPENAMES 8458 .memberName =
"typeDefinitionNode",
8460 .namespaceZero =
true,
8465 #ifdef UA_ENABLE_TYPENAMES 8466 .memberName =
"values",
8468 .namespaceZero =
true,
8476 #ifdef UA_ENABLE_TYPENAMES 8477 .memberName =
"policyId",
8479 .namespaceZero =
true,
8487 #ifdef UA_ENABLE_TYPENAMES 8488 .memberName =
"requestHeader",
8490 .namespaceZero =
true,
8495 #ifdef UA_ENABLE_TYPENAMES 8496 .memberName =
"publishingEnabled",
8498 .namespaceZero =
true,
8503 #ifdef UA_ENABLE_TYPENAMES 8504 .memberName =
"subscriptionIds",
8506 .namespaceZero =
true,
8514 #ifdef UA_ENABLE_TYPENAMES 8517 .namespaceZero =
true,
8525 #ifdef UA_ENABLE_TYPENAMES 8526 .memberName =
"requestHeader",
8528 .namespaceZero =
true,
8533 #ifdef UA_ENABLE_TYPENAMES 8534 .memberName =
"methodsToCall",
8536 .namespaceZero =
true,
8544 #ifdef UA_ENABLE_TYPENAMES 8545 .memberName =
"specifiedAttributes",
8547 .namespaceZero =
true,
8552 #ifdef UA_ENABLE_TYPENAMES 8553 .memberName =
"displayName",
8555 .namespaceZero =
true,
8560 #ifdef UA_ENABLE_TYPENAMES 8561 .memberName =
"description",
8563 .namespaceZero =
true,
8568 #ifdef UA_ENABLE_TYPENAMES 8569 .memberName =
"writeMask",
8571 .namespaceZero =
true,
8576 #ifdef UA_ENABLE_TYPENAMES 8577 .memberName =
"userWriteMask",
8579 .namespaceZero =
true,
8584 #ifdef UA_ENABLE_TYPENAMES 8585 .memberName =
"executable",
8587 .namespaceZero =
true,
8592 #ifdef UA_ENABLE_TYPENAMES 8593 .memberName =
"userExecutable",
8595 .namespaceZero =
true,
8603 #ifdef UA_ENABLE_TYPENAMES 8604 .memberName =
"sourceNodeId",
8606 .namespaceZero =
true,
8611 #ifdef UA_ENABLE_TYPENAMES 8612 .memberName =
"referenceTypeId",
8614 .namespaceZero =
true,
8619 #ifdef UA_ENABLE_TYPENAMES 8620 .memberName =
"isForward",
8622 .namespaceZero =
true,
8627 #ifdef UA_ENABLE_TYPENAMES 8628 .memberName =
"targetNodeId",
8630 .namespaceZero =
true,
8635 #ifdef UA_ENABLE_TYPENAMES 8636 .memberName =
"deleteBidirectional",
8638 .namespaceZero =
true,
8646 #ifdef UA_ENABLE_TYPENAMES 8647 .memberName =
"nodeId",
8649 .namespaceZero =
true,
8654 #ifdef UA_ENABLE_TYPENAMES 8655 .memberName =
"attributeId",
8657 .namespaceZero =
true,
8662 #ifdef UA_ENABLE_TYPENAMES 8663 .memberName =
"indexRange",
8665 .namespaceZero =
true,
8670 #ifdef UA_ENABLE_TYPENAMES 8671 .memberName =
"value",
8673 .namespaceZero =
true,
8681 #ifdef UA_ENABLE_TYPENAMES 8682 .memberName =
"statusCode",
8684 .namespaceZero =
true,
8689 #ifdef UA_ENABLE_TYPENAMES 8690 .memberName =
"monitoredItemId",
8692 .namespaceZero =
true,
8697 #ifdef UA_ENABLE_TYPENAMES 8698 .memberName =
"revisedSamplingInterval",
8700 .namespaceZero =
true,
8705 #ifdef UA_ENABLE_TYPENAMES 8706 .memberName =
"revisedQueueSize",
8708 .namespaceZero =
true,
8713 #ifdef UA_ENABLE_TYPENAMES 8714 .memberName =
"filterResult",
8716 .namespaceZero =
true,
8724 #ifdef UA_ENABLE_TYPENAMES 8727 .namespaceZero =
true,
8735 #ifdef UA_ENABLE_TYPENAMES 8736 .memberName =
"clientHandle",
8738 .namespaceZero =
true,
8743 #ifdef UA_ENABLE_TYPENAMES 8744 .memberName =
"samplingInterval",
8746 .namespaceZero =
true,
8751 #ifdef UA_ENABLE_TYPENAMES 8752 .memberName =
"filter",
8754 .namespaceZero =
true,
8759 #ifdef UA_ENABLE_TYPENAMES 8760 .memberName =
"queueSize",
8762 .namespaceZero =
true,
8767 #ifdef UA_ENABLE_TYPENAMES 8768 .memberName =
"discardOldest",
8770 .namespaceZero =
true,
8778 #ifdef UA_ENABLE_TYPENAMES 8779 .memberName =
"algorithm",
8781 .namespaceZero =
true,
8786 #ifdef UA_ENABLE_TYPENAMES 8787 .memberName =
"signature",
8789 .namespaceZero =
true,
8797 #ifdef UA_ENABLE_TYPENAMES 8798 .memberName =
"referenceTypeId",
8800 .namespaceZero =
true,
8805 #ifdef UA_ENABLE_TYPENAMES 8806 .memberName =
"isInverse",
8808 .namespaceZero =
true,
8813 #ifdef UA_ENABLE_TYPENAMES 8814 .memberName =
"targetId",
8816 .namespaceZero =
true,
8824 #ifdef UA_ENABLE_TYPENAMES 8825 .memberName =
"name",
8827 .namespaceZero =
true,
8832 #ifdef UA_ENABLE_TYPENAMES 8833 .memberName =
"dataType",
8835 .namespaceZero =
true,
8840 #ifdef UA_ENABLE_TYPENAMES 8841 .memberName =
"valueRank",
8843 .namespaceZero =
true,
8848 #ifdef UA_ENABLE_TYPENAMES 8849 .memberName =
"arrayDimensions",
8851 .namespaceZero =
true,
8856 #ifdef UA_ENABLE_TYPENAMES 8857 .memberName =
"description",
8859 .namespaceZero =
true,
8867 #ifdef UA_ENABLE_TYPENAMES 8868 .memberName =
"policyId",
8870 .namespaceZero =
true,
8878 #ifdef UA_ENABLE_TYPENAMES 8879 .memberName =
"specifiedAttributes",
8881 .namespaceZero =
true,
8886 #ifdef UA_ENABLE_TYPENAMES 8887 .memberName =
"displayName",
8889 .namespaceZero =
true,
8894 #ifdef UA_ENABLE_TYPENAMES 8895 .memberName =
"description",
8897 .namespaceZero =
true,
8902 #ifdef UA_ENABLE_TYPENAMES 8903 .memberName =
"writeMask",
8905 .namespaceZero =
true,
8910 #ifdef UA_ENABLE_TYPENAMES 8911 .memberName =
"userWriteMask",
8913 .namespaceZero =
true,
8918 #ifdef UA_ENABLE_TYPENAMES 8919 .memberName =
"isAbstract",
8921 .namespaceZero =
true,
8929 #ifdef UA_ENABLE_TYPENAMES 8932 .namespaceZero =
true,
8940 #ifdef UA_ENABLE_TYPENAMES 8943 .namespaceZero =
true,
8951 #ifdef UA_ENABLE_TYPENAMES 8954 .namespaceZero =
true,
8962 #ifdef UA_ENABLE_TYPENAMES 8963 .memberName =
"productUri",
8965 .namespaceZero =
true,
8970 #ifdef UA_ENABLE_TYPENAMES 8971 .memberName =
"manufacturerName",
8973 .namespaceZero =
true,
8978 #ifdef UA_ENABLE_TYPENAMES 8979 .memberName =
"productName",
8981 .namespaceZero =
true,
8986 #ifdef UA_ENABLE_TYPENAMES 8987 .memberName =
"softwareVersion",
8989 .namespaceZero =
true,
8994 #ifdef UA_ENABLE_TYPENAMES 8995 .memberName =
"buildNumber",
8997 .namespaceZero =
true,
9002 #ifdef UA_ENABLE_TYPENAMES 9003 .memberName =
"buildDate",
9005 .namespaceZero =
true,
9013 #ifdef UA_ENABLE_TYPENAMES 9016 .namespaceZero =
true,
9024 #ifdef UA_ENABLE_TYPENAMES 9025 .memberName =
"channelId",
9027 .namespaceZero =
true,
9032 #ifdef UA_ENABLE_TYPENAMES 9033 .memberName =
"tokenId",
9035 .namespaceZero =
true,
9040 #ifdef UA_ENABLE_TYPENAMES 9041 .memberName =
"createdAt",
9043 .namespaceZero =
true,
9048 #ifdef UA_ENABLE_TYPENAMES 9049 .memberName =
"revisedLifetime",
9051 .namespaceZero =
true,
9059 #ifdef UA_ENABLE_TYPENAMES 9060 .memberName =
"clientHandle",
9062 .namespaceZero =
true,
9067 #ifdef UA_ENABLE_TYPENAMES 9068 .memberName =
"value",
9070 .namespaceZero =
true,
9078 #ifdef UA_ENABLE_TYPENAMES 9079 .memberName =
"nodeId",
9081 .namespaceZero =
true,
9086 #ifdef UA_ENABLE_TYPENAMES 9087 .memberName =
"deleteTargetReferences",
9089 .namespaceZero =
true,
9097 #ifdef UA_ENABLE_TYPENAMES 9098 .memberName =
"subscriptionId",
9100 .namespaceZero =
true,
9105 #ifdef UA_ENABLE_TYPENAMES 9106 .memberName =
"sequenceNumber",
9108 .namespaceZero =
true,
9116 #ifdef UA_ENABLE_TYPENAMES 9117 .memberName =
"nodeId",
9119 .namespaceZero =
true,
9124 #ifdef UA_ENABLE_TYPENAMES 9125 .memberName =
"attributeId",
9127 .namespaceZero =
true,
9132 #ifdef UA_ENABLE_TYPENAMES 9133 .memberName =
"indexRange",
9135 .namespaceZero =
true,
9140 #ifdef UA_ENABLE_TYPENAMES 9141 .memberName =
"dataEncoding",
9143 .namespaceZero =
true,
9151 #ifdef UA_ENABLE_TYPENAMES 9152 .memberName =
"specifiedAttributes",
9154 .namespaceZero =
true,
9159 #ifdef UA_ENABLE_TYPENAMES 9160 .memberName =
"displayName",
9162 .namespaceZero =
true,
9167 #ifdef UA_ENABLE_TYPENAMES 9168 .memberName =
"description",
9170 .namespaceZero =
true,
9175 #ifdef UA_ENABLE_TYPENAMES 9176 .memberName =
"writeMask",
9178 .namespaceZero =
true,
9183 #ifdef UA_ENABLE_TYPENAMES 9184 .memberName =
"userWriteMask",
9186 .namespaceZero =
true,
9191 #ifdef UA_ENABLE_TYPENAMES 9192 .memberName =
"isAbstract",
9194 .namespaceZero =
true,
9202 #ifdef UA_ENABLE_TYPENAMES 9203 .memberName =
"timestamp",
9205 .namespaceZero =
true,
9210 #ifdef UA_ENABLE_TYPENAMES 9211 .memberName =
"requestHandle",
9213 .namespaceZero =
true,
9218 #ifdef UA_ENABLE_TYPENAMES 9219 .memberName =
"serviceResult",
9221 .namespaceZero =
true,
9226 #ifdef UA_ENABLE_TYPENAMES 9227 .memberName =
"serviceDiagnostics",
9229 .namespaceZero =
true,
9234 #ifdef UA_ENABLE_TYPENAMES 9235 .memberName =
"stringTable",
9237 .namespaceZero =
true,
9242 #ifdef UA_ENABLE_TYPENAMES 9243 .memberName =
"additionalHeader",
9245 .namespaceZero =
true,
9253 #ifdef UA_ENABLE_TYPENAMES 9254 .memberName =
"requestHeader",
9256 .namespaceZero =
true,
9261 #ifdef UA_ENABLE_TYPENAMES 9262 .memberName =
"subscriptionIds",
9264 .namespaceZero =
true,
9272 #ifdef UA_ENABLE_TYPENAMES 9273 .memberName =
"viewId",
9275 .namespaceZero =
true,
9280 #ifdef UA_ENABLE_TYPENAMES 9281 .memberName =
"timestamp",
9283 .namespaceZero =
true,
9288 #ifdef UA_ENABLE_TYPENAMES 9289 .memberName =
"viewVersion",
9291 .namespaceZero =
true,
9299 #ifdef UA_ENABLE_TYPENAMES 9300 .memberName =
"responseHeader",
9302 .namespaceZero =
true,
9307 #ifdef UA_ENABLE_TYPENAMES 9308 .memberName =
"results",
9310 .namespaceZero =
true,
9315 #ifdef UA_ENABLE_TYPENAMES 9316 .memberName =
"diagnosticInfos",
9318 .namespaceZero =
true,
9326 #ifdef UA_ENABLE_TYPENAMES 9327 .memberName =
"specifiedAttributes",
9329 .namespaceZero =
true,
9334 #ifdef UA_ENABLE_TYPENAMES 9335 .memberName =
"displayName",
9337 .namespaceZero =
true,
9342 #ifdef UA_ENABLE_TYPENAMES 9343 .memberName =
"description",
9345 .namespaceZero =
true,
9350 #ifdef UA_ENABLE_TYPENAMES 9351 .memberName =
"writeMask",
9353 .namespaceZero =
true,
9358 #ifdef UA_ENABLE_TYPENAMES 9359 .memberName =
"userWriteMask",
9361 .namespaceZero =
true,
9369 #ifdef UA_ENABLE_TYPENAMES 9370 .memberName =
"requestHeader",
9372 .namespaceZero =
true,
9377 #ifdef UA_ENABLE_TYPENAMES 9378 .memberName =
"nodesToRegister",
9380 .namespaceZero =
true,
9388 #ifdef UA_ENABLE_TYPENAMES 9389 .memberName =
"requestHeader",
9391 .namespaceZero =
true,
9396 #ifdef UA_ENABLE_TYPENAMES 9397 .memberName =
"nodesToDelete",
9399 .namespaceZero =
true,
9407 #ifdef UA_ENABLE_TYPENAMES 9408 .memberName =
"responseHeader",
9410 .namespaceZero =
true,
9415 #ifdef UA_ENABLE_TYPENAMES 9416 .memberName =
"subscriptionId",
9418 .namespaceZero =
true,
9423 #ifdef UA_ENABLE_TYPENAMES 9424 .memberName =
"availableSequenceNumbers",
9426 .namespaceZero =
true,
9431 #ifdef UA_ENABLE_TYPENAMES 9432 .memberName =
"moreNotifications",
9434 .namespaceZero =
true,
9439 #ifdef UA_ENABLE_TYPENAMES 9440 .memberName =
"notificationMessage",
9442 .namespaceZero =
true,
9447 #ifdef UA_ENABLE_TYPENAMES 9448 .memberName =
"results",
9450 .namespaceZero =
true,
9455 #ifdef UA_ENABLE_TYPENAMES 9456 .memberName =
"diagnosticInfos",
9458 .namespaceZero =
true,
9466 #ifdef UA_ENABLE_TYPENAMES 9467 .memberName =
"monitoredItemId",
9469 .namespaceZero =
true,
9474 #ifdef UA_ENABLE_TYPENAMES 9475 .memberName =
"requestedParameters",
9477 .namespaceZero =
true,
9485 #ifdef UA_ENABLE_TYPENAMES 9486 .memberName =
"policyId",
9488 .namespaceZero =
true,
9493 #ifdef UA_ENABLE_TYPENAMES 9494 .memberName =
"userName",
9496 .namespaceZero =
true,
9501 #ifdef UA_ENABLE_TYPENAMES 9502 .memberName =
"password",
9504 .namespaceZero =
true,
9509 #ifdef UA_ENABLE_TYPENAMES 9510 .memberName =
"encryptionAlgorithm",
9512 .namespaceZero =
true,
9520 #ifdef UA_ENABLE_TYPENAMES 9523 .namespaceZero =
true,
9531 #ifdef UA_ENABLE_TYPENAMES 9534 .namespaceZero =
true,
9542 #ifdef UA_ENABLE_TYPENAMES 9543 .memberName =
"requestHeader",
9545 .namespaceZero =
true,
9550 #ifdef UA_ENABLE_TYPENAMES 9551 .memberName =
"clientSignature",
9553 .namespaceZero =
true,
9558 #ifdef UA_ENABLE_TYPENAMES 9559 .memberName =
"clientSoftwareCertificates",
9561 .namespaceZero =
true,
9566 #ifdef UA_ENABLE_TYPENAMES 9567 .memberName =
"localeIds",
9569 .namespaceZero =
true,
9574 #ifdef UA_ENABLE_TYPENAMES 9575 .memberName =
"userIdentityToken",
9577 .namespaceZero =
true,
9582 #ifdef UA_ENABLE_TYPENAMES 9583 .memberName =
"userTokenSignature",
9585 .namespaceZero =
true,
9593 #ifdef UA_ENABLE_TYPENAMES 9594 .memberName =
"responseHeader",
9596 .namespaceZero =
true,
9601 #ifdef UA_ENABLE_TYPENAMES 9602 .memberName =
"serverProtocolVersion",
9604 .namespaceZero =
true,
9609 #ifdef UA_ENABLE_TYPENAMES 9610 .memberName =
"securityToken",
9612 .namespaceZero =
true,
9617 #ifdef UA_ENABLE_TYPENAMES 9618 .memberName =
"serverNonce",
9620 .namespaceZero =
true,
9628 #ifdef UA_ENABLE_TYPENAMES 9631 .namespaceZero =
true,
9639 #ifdef UA_ENABLE_TYPENAMES 9642 .namespaceZero =
true,
9650 #ifdef UA_ENABLE_TYPENAMES 9651 .memberName =
"responseHeader",
9653 .namespaceZero =
true,
9658 #ifdef UA_ENABLE_TYPENAMES 9659 .memberName =
"queryDataSets",
9661 .namespaceZero =
true,
9666 #ifdef UA_ENABLE_TYPENAMES 9667 .memberName =
"revisedContinuationPoint",
9669 .namespaceZero =
true,
9677 #ifdef UA_ENABLE_TYPENAMES 9678 .memberName =
"responseHeader",
9680 .namespaceZero =
true,
9685 #ifdef UA_ENABLE_TYPENAMES 9686 .memberName =
"serverNonce",
9688 .namespaceZero =
true,
9693 #ifdef UA_ENABLE_TYPENAMES 9694 .memberName =
"results",
9696 .namespaceZero =
true,
9701 #ifdef UA_ENABLE_TYPENAMES 9702 .memberName =
"diagnosticInfos",
9704 .namespaceZero =
true,
9712 #ifdef UA_ENABLE_TYPENAMES 9715 .namespaceZero =
true,
9723 #ifdef UA_ENABLE_TYPENAMES 9724 .memberName =
"requestHeader",
9726 .namespaceZero =
true,
9731 #ifdef UA_ENABLE_TYPENAMES 9732 .memberName =
"releaseContinuationPoint",
9734 .namespaceZero =
true,
9739 #ifdef UA_ENABLE_TYPENAMES 9740 .memberName =
"continuationPoint",
9742 .namespaceZero =
true,
9750 #ifdef UA_ENABLE_TYPENAMES 9751 .memberName =
"responseHeader",
9753 .namespaceZero =
true,
9758 #ifdef UA_ENABLE_TYPENAMES 9759 .memberName =
"results",
9761 .namespaceZero =
true,
9766 #ifdef UA_ENABLE_TYPENAMES 9767 .memberName =
"diagnosticInfos",
9769 .namespaceZero =
true,
9777 #ifdef UA_ENABLE_TYPENAMES 9778 .memberName =
"requestHeader",
9780 .namespaceZero =
true,
9785 #ifdef UA_ENABLE_TYPENAMES 9786 .memberName =
"releaseContinuationPoints",
9788 .namespaceZero =
true,
9793 #ifdef UA_ENABLE_TYPENAMES 9794 .memberName =
"continuationPoints",
9796 .namespaceZero =
true,
9804 #ifdef UA_ENABLE_TYPENAMES 9805 .memberName =
"requestHeader",
9807 .namespaceZero =
true,
9812 #ifdef UA_ENABLE_TYPENAMES 9813 .memberName =
"requestedPublishingInterval",
9815 .namespaceZero =
true,
9820 #ifdef UA_ENABLE_TYPENAMES 9821 .memberName =
"requestedLifetimeCount",
9823 .namespaceZero =
true,
9828 #ifdef UA_ENABLE_TYPENAMES 9829 .memberName =
"requestedMaxKeepAliveCount",
9831 .namespaceZero =
true,
9836 #ifdef UA_ENABLE_TYPENAMES 9837 .memberName =
"maxNotificationsPerPublish",
9839 .namespaceZero =
true,
9844 #ifdef UA_ENABLE_TYPENAMES 9845 .memberName =
"publishingEnabled",
9847 .namespaceZero =
true,
9852 #ifdef UA_ENABLE_TYPENAMES 9853 .memberName =
"priority",
9855 .namespaceZero =
true,
9863 #ifdef UA_ENABLE_TYPENAMES 9864 .memberName =
"specifiedAttributes",
9866 .namespaceZero =
true,
9871 #ifdef UA_ENABLE_TYPENAMES 9872 .memberName =
"displayName",
9874 .namespaceZero =
true,
9879 #ifdef UA_ENABLE_TYPENAMES 9880 .memberName =
"description",
9882 .namespaceZero =
true,
9887 #ifdef UA_ENABLE_TYPENAMES 9888 .memberName =
"writeMask",
9890 .namespaceZero =
true,
9895 #ifdef UA_ENABLE_TYPENAMES 9896 .memberName =
"userWriteMask",
9898 .namespaceZero =
true,
9903 #ifdef UA_ENABLE_TYPENAMES 9904 .memberName =
"value",
9906 .namespaceZero =
true,
9911 #ifdef UA_ENABLE_TYPENAMES 9912 .memberName =
"dataType",
9914 .namespaceZero =
true,
9919 #ifdef UA_ENABLE_TYPENAMES 9920 .memberName =
"valueRank",
9922 .namespaceZero =
true,
9927 #ifdef UA_ENABLE_TYPENAMES 9928 .memberName =
"arrayDimensions",
9930 .namespaceZero =
true,
9935 #ifdef UA_ENABLE_TYPENAMES 9936 .memberName =
"isAbstract",
9938 .namespaceZero =
true,
9946 #ifdef UA_ENABLE_TYPENAMES 9947 .memberName =
"statusCode",
9949 .namespaceZero =
true,
9954 #ifdef UA_ENABLE_TYPENAMES 9955 .memberName =
"targets",
9957 .namespaceZero =
true,
9965 #ifdef UA_ENABLE_TYPENAMES 9966 .memberName =
"responseHeader",
9968 .namespaceZero =
true,
9973 #ifdef UA_ENABLE_TYPENAMES 9974 .memberName =
"revisedPublishingInterval",
9976 .namespaceZero =
true,
9981 #ifdef UA_ENABLE_TYPENAMES 9982 .memberName =
"revisedLifetimeCount",
9984 .namespaceZero =
true,
9989 #ifdef UA_ENABLE_TYPENAMES 9990 .memberName =
"revisedMaxKeepAliveCount",
9992 .namespaceZero =
true,
10000 #ifdef UA_ENABLE_TYPENAMES 10001 .memberName =
"requestHeader",
10003 .namespaceZero =
true,
10008 #ifdef UA_ENABLE_TYPENAMES 10009 .memberName =
"clientProtocolVersion",
10011 .namespaceZero =
true,
10016 #ifdef UA_ENABLE_TYPENAMES 10017 .memberName =
"requestType",
10019 .namespaceZero =
true,
10024 #ifdef UA_ENABLE_TYPENAMES 10025 .memberName =
"securityMode",
10027 .namespaceZero =
true,
10032 #ifdef UA_ENABLE_TYPENAMES 10033 .memberName =
"clientNonce",
10035 .namespaceZero =
true,
10040 #ifdef UA_ENABLE_TYPENAMES 10041 .memberName =
"requestedLifetime",
10043 .namespaceZero =
true,
10051 #ifdef UA_ENABLE_TYPENAMES 10052 .memberName =
"responseHeader",
10054 .namespaceZero =
true,
10059 #ifdef UA_ENABLE_TYPENAMES 10060 .memberName =
"registeredNodeIds",
10062 .namespaceZero =
true,
10070 #ifdef UA_ENABLE_TYPENAMES 10071 .memberName =
"requestHeader",
10073 .namespaceZero =
true,
10078 #ifdef UA_ENABLE_TYPENAMES 10079 .memberName =
"deleteSubscriptions",
10081 .namespaceZero =
true,
10089 #ifdef UA_ENABLE_TYPENAMES 10090 .memberName =
"requestHeader",
10092 .namespaceZero =
true,
10097 #ifdef UA_ENABLE_TYPENAMES 10098 .memberName =
"subscriptionId",
10100 .namespaceZero =
true,
10105 #ifdef UA_ENABLE_TYPENAMES 10106 .memberName =
"requestedPublishingInterval",
10108 .namespaceZero =
true,
10113 #ifdef UA_ENABLE_TYPENAMES 10114 .memberName =
"requestedLifetimeCount",
10116 .namespaceZero =
true,
10121 #ifdef UA_ENABLE_TYPENAMES 10122 .memberName =
"requestedMaxKeepAliveCount",
10124 .namespaceZero =
true,
10129 #ifdef UA_ENABLE_TYPENAMES 10130 .memberName =
"maxNotificationsPerPublish",
10132 .namespaceZero =
true,
10137 #ifdef UA_ENABLE_TYPENAMES 10138 .memberName =
"priority",
10140 .namespaceZero =
true,
10148 #ifdef UA_ENABLE_TYPENAMES 10149 .memberName =
"policyId",
10151 .namespaceZero =
true,
10156 #ifdef UA_ENABLE_TYPENAMES 10157 .memberName =
"tokenType",
10159 .namespaceZero =
true,
10164 #ifdef UA_ENABLE_TYPENAMES 10165 .memberName =
"issuedTokenType",
10167 .namespaceZero =
true,
10172 #ifdef UA_ENABLE_TYPENAMES 10173 .memberName =
"issuerEndpointUrl",
10175 .namespaceZero =
true,
10180 #ifdef UA_ENABLE_TYPENAMES 10181 .memberName =
"securityPolicyUri",
10183 .namespaceZero =
true,
10191 #ifdef UA_ENABLE_TYPENAMES 10192 .memberName =
"requestHeader",
10194 .namespaceZero =
true,
10199 #ifdef UA_ENABLE_TYPENAMES 10200 .memberName =
"subscriptionId",
10202 .namespaceZero =
true,
10207 #ifdef UA_ENABLE_TYPENAMES 10208 .memberName =
"monitoredItemIds",
10210 .namespaceZero =
true,
10218 #ifdef UA_ENABLE_TYPENAMES 10219 .memberName =
"specifiedAttributes",
10221 .namespaceZero =
true,
10226 #ifdef UA_ENABLE_TYPENAMES 10227 .memberName =
"displayName",
10229 .namespaceZero =
true,
10234 #ifdef UA_ENABLE_TYPENAMES 10235 .memberName =
"description",
10237 .namespaceZero =
true,
10242 #ifdef UA_ENABLE_TYPENAMES 10243 .memberName =
"writeMask",
10245 .namespaceZero =
true,
10250 #ifdef UA_ENABLE_TYPENAMES 10251 .memberName =
"userWriteMask",
10253 .namespaceZero =
true,
10258 #ifdef UA_ENABLE_TYPENAMES 10259 .memberName =
"isAbstract",
10261 .namespaceZero =
true,
10266 #ifdef UA_ENABLE_TYPENAMES 10267 .memberName =
"symmetric",
10269 .namespaceZero =
true,
10274 #ifdef UA_ENABLE_TYPENAMES 10275 .memberName =
"inverseName",
10277 .namespaceZero =
true,
10285 #ifdef UA_ENABLE_TYPENAMES 10286 .memberName =
"requestHeader",
10288 .namespaceZero =
true,
10293 #ifdef UA_ENABLE_TYPENAMES 10294 .memberName =
"subscriptionId",
10296 .namespaceZero =
true,
10301 #ifdef UA_ENABLE_TYPENAMES 10302 .memberName =
"monitoringMode",
10304 .namespaceZero =
true,
10309 #ifdef UA_ENABLE_TYPENAMES 10310 .memberName =
"monitoredItemIds",
10312 .namespaceZero =
true,
10320 #ifdef UA_ENABLE_TYPENAMES 10321 .memberName =
"responseHeader",
10323 .namespaceZero =
true,
10331 #ifdef UA_ENABLE_TYPENAMES 10332 .memberName =
"requestHeader",
10334 .namespaceZero =
true,
10339 #ifdef UA_ENABLE_TYPENAMES 10340 .memberName =
"nodesToWrite",
10342 .namespaceZero =
true,
10350 #ifdef UA_ENABLE_TYPENAMES 10351 .memberName =
"specifiedAttributes",
10353 .namespaceZero =
true,
10358 #ifdef UA_ENABLE_TYPENAMES 10359 .memberName =
"displayName",
10361 .namespaceZero =
true,
10366 #ifdef UA_ENABLE_TYPENAMES 10367 .memberName =
"description",
10369 .namespaceZero =
true,
10374 #ifdef UA_ENABLE_TYPENAMES 10375 .memberName =
"writeMask",
10377 .namespaceZero =
true,
10382 #ifdef UA_ENABLE_TYPENAMES 10383 .memberName =
"userWriteMask",
10385 .namespaceZero =
true,
10390 #ifdef UA_ENABLE_TYPENAMES 10391 .memberName =
"eventNotifier",
10393 .namespaceZero =
true,
10401 #ifdef UA_ENABLE_TYPENAMES 10402 .memberName =
"nodeId",
10404 .namespaceZero =
true,
10409 #ifdef UA_ENABLE_TYPENAMES 10410 .memberName =
"browseDirection",
10412 .namespaceZero =
true,
10417 #ifdef UA_ENABLE_TYPENAMES 10418 .memberName =
"referenceTypeId",
10420 .namespaceZero =
true,
10425 #ifdef UA_ENABLE_TYPENAMES 10426 .memberName =
"includeSubtypes",
10428 .namespaceZero =
true,
10433 #ifdef UA_ENABLE_TYPENAMES 10434 .memberName =
"nodeClassMask",
10436 .namespaceZero =
true,
10441 #ifdef UA_ENABLE_TYPENAMES 10442 .memberName =
"resultMask",
10444 .namespaceZero =
true,
10452 #ifdef UA_ENABLE_TYPENAMES 10453 .memberName =
"requestHeader",
10455 .namespaceZero =
true,
10460 #ifdef UA_ENABLE_TYPENAMES 10461 .memberName =
"subscriptionId",
10463 .namespaceZero =
true,
10468 #ifdef UA_ENABLE_TYPENAMES 10469 .memberName =
"retransmitSequenceNumber",
10471 .namespaceZero =
true,
10479 #ifdef UA_ENABLE_TYPENAMES 10480 .memberName =
"requestHeader",
10482 .namespaceZero =
true,
10487 #ifdef UA_ENABLE_TYPENAMES 10488 .memberName =
"endpointUrl",
10490 .namespaceZero =
true,
10495 #ifdef UA_ENABLE_TYPENAMES 10496 .memberName =
"localeIds",
10498 .namespaceZero =
true,
10503 #ifdef UA_ENABLE_TYPENAMES 10504 .memberName =
"profileUris",
10506 .namespaceZero =
true,
10514 #ifdef UA_ENABLE_TYPENAMES 10515 .memberName =
"requestHeader",
10517 .namespaceZero =
true,
10522 #ifdef UA_ENABLE_TYPENAMES 10523 .memberName =
"subscriptionAcknowledgements",
10525 .namespaceZero =
true,
10533 #ifdef UA_ENABLE_TYPENAMES 10534 .memberName =
"responseHeader",
10536 .namespaceZero =
true,
10541 #ifdef UA_ENABLE_TYPENAMES 10542 .memberName =
"results",
10544 .namespaceZero =
true,
10549 #ifdef UA_ENABLE_TYPENAMES 10550 .memberName =
"diagnosticInfos",
10552 .namespaceZero =
true,
10560 #ifdef UA_ENABLE_TYPENAMES 10561 .memberName =
"monitoredItems",
10563 .namespaceZero =
true,
10568 #ifdef UA_ENABLE_TYPENAMES 10569 .memberName =
"diagnosticInfos",
10571 .namespaceZero =
true,
10579 #ifdef UA_ENABLE_TYPENAMES 10580 .memberName =
"responseHeader",
10582 .namespaceZero =
true,
10590 #ifdef UA_ENABLE_TYPENAMES 10591 .memberName =
"requestHeader",
10593 .namespaceZero =
true,
10598 #ifdef UA_ENABLE_TYPENAMES 10599 .memberName =
"subscriptionId",
10601 .namespaceZero =
true,
10606 #ifdef UA_ENABLE_TYPENAMES 10607 .memberName =
"timestampsToReturn",
10609 .namespaceZero =
true,
10614 #ifdef UA_ENABLE_TYPENAMES 10615 .memberName =
"itemsToModify",
10617 .namespaceZero =
true,
10625 #ifdef UA_ENABLE_TYPENAMES 10626 .memberName =
"responseHeader",
10628 .namespaceZero =
true,
10633 #ifdef UA_ENABLE_TYPENAMES 10634 .memberName =
"results",
10636 .namespaceZero =
true,
10641 #ifdef UA_ENABLE_TYPENAMES 10642 .memberName =
"diagnosticInfos",
10644 .namespaceZero =
true,
10652 #ifdef UA_ENABLE_TYPENAMES 10653 .memberName =
"requestHeader",
10655 .namespaceZero =
true,
10660 #ifdef UA_ENABLE_TYPENAMES 10661 .memberName =
"endpointUrl",
10663 .namespaceZero =
true,
10668 #ifdef UA_ENABLE_TYPENAMES 10669 .memberName =
"localeIds",
10671 .namespaceZero =
true,
10676 #ifdef UA_ENABLE_TYPENAMES 10677 .memberName =
"serverUris",
10679 .namespaceZero =
true,
10687 #ifdef UA_ENABLE_TYPENAMES 10688 .memberName =
"referenceTypeId",
10690 .namespaceZero =
true,
10695 #ifdef UA_ENABLE_TYPENAMES 10696 .memberName =
"isForward",
10698 .namespaceZero =
true,
10703 #ifdef UA_ENABLE_TYPENAMES 10704 .memberName =
"nodeId",
10706 .namespaceZero =
true,
10711 #ifdef UA_ENABLE_TYPENAMES 10712 .memberName =
"browseName",
10714 .namespaceZero =
true,
10719 #ifdef UA_ENABLE_TYPENAMES 10720 .memberName =
"displayName",
10722 .namespaceZero =
true,
10727 #ifdef UA_ENABLE_TYPENAMES 10728 .memberName =
"nodeClass",
10730 .namespaceZero =
true,
10735 #ifdef UA_ENABLE_TYPENAMES 10736 .memberName =
"typeDefinition",
10738 .namespaceZero =
true,
10746 #ifdef UA_ENABLE_TYPENAMES 10747 .memberName =
"responseHeader",
10749 .namespaceZero =
true,
10754 #ifdef UA_ENABLE_TYPENAMES 10755 .memberName =
"results",
10757 .namespaceZero =
true,
10762 #ifdef UA_ENABLE_TYPENAMES 10763 .memberName =
"diagnosticInfos",
10765 .namespaceZero =
true,
10773 #ifdef UA_ENABLE_TYPENAMES 10774 .memberName =
"elementResults",
10776 .namespaceZero =
true,
10781 #ifdef UA_ENABLE_TYPENAMES 10782 .memberName =
"elementDiagnosticInfos",
10784 .namespaceZero =
true,
10792 #ifdef UA_ENABLE_TYPENAMES 10793 .memberName =
"sourceNodeId",
10795 .namespaceZero =
true,
10800 #ifdef UA_ENABLE_TYPENAMES 10801 .memberName =
"referenceTypeId",
10803 .namespaceZero =
true,
10808 #ifdef UA_ENABLE_TYPENAMES 10809 .memberName =
"isForward",
10811 .namespaceZero =
true,
10816 #ifdef UA_ENABLE_TYPENAMES 10817 .memberName =
"targetServerUri",
10819 .namespaceZero =
true,
10824 #ifdef UA_ENABLE_TYPENAMES 10825 .memberName =
"targetNodeId",
10827 .namespaceZero =
true,
10832 #ifdef UA_ENABLE_TYPENAMES 10833 .memberName =
"targetNodeClass",
10835 .namespaceZero =
true,
10843 #ifdef UA_ENABLE_TYPENAMES 10844 .memberName =
"responseHeader",
10846 .namespaceZero =
true,
10851 #ifdef UA_ENABLE_TYPENAMES 10852 .memberName =
"subscriptionId",
10854 .namespaceZero =
true,
10859 #ifdef UA_ENABLE_TYPENAMES 10860 .memberName =
"revisedPublishingInterval",
10862 .namespaceZero =
true,
10867 #ifdef UA_ENABLE_TYPENAMES 10868 .memberName =
"revisedLifetimeCount",
10870 .namespaceZero =
true,
10875 #ifdef UA_ENABLE_TYPENAMES 10876 .memberName =
"revisedMaxKeepAliveCount",
10878 .namespaceZero =
true,
10886 #ifdef UA_ENABLE_TYPENAMES 10887 .memberName =
"responseHeader",
10889 .namespaceZero =
true,
10894 #ifdef UA_ENABLE_TYPENAMES 10895 .memberName =
"results",
10897 .namespaceZero =
true,
10902 #ifdef UA_ENABLE_TYPENAMES 10903 .memberName =
"diagnosticInfos",
10905 .namespaceZero =
true,
10913 #ifdef UA_ENABLE_TYPENAMES 10914 .memberName =
"elements",
10916 .namespaceZero =
true,
10924 #ifdef UA_ENABLE_TYPENAMES 10925 .memberName =
"responseHeader",
10927 .namespaceZero =
true,
10932 #ifdef UA_ENABLE_TYPENAMES 10933 .memberName =
"results",
10935 .namespaceZero =
true,
10940 #ifdef UA_ENABLE_TYPENAMES 10941 .memberName =
"diagnosticInfos",
10943 .namespaceZero =
true,
10951 #ifdef UA_ENABLE_TYPENAMES 10952 .memberName =
"responseHeader",
10954 .namespaceZero =
true,
10959 #ifdef UA_ENABLE_TYPENAMES 10960 .memberName =
"results",
10962 .namespaceZero =
true,
10967 #ifdef UA_ENABLE_TYPENAMES 10968 .memberName =
"diagnosticInfos",
10970 .namespaceZero =
true,
10978 #ifdef UA_ENABLE_TYPENAMES 10979 .memberName =
"responseHeader",
10981 .namespaceZero =
true,
10986 #ifdef UA_ENABLE_TYPENAMES 10987 .memberName =
"results",
10989 .namespaceZero =
true,
10994 #ifdef UA_ENABLE_TYPENAMES 10995 .memberName =
"diagnosticInfos",
10997 .namespaceZero =
true,
11005 #ifdef UA_ENABLE_TYPENAMES 11006 .memberName =
"responseHeader",
11008 .namespaceZero =
true,
11013 #ifdef UA_ENABLE_TYPENAMES 11014 .memberName =
"results",
11016 .namespaceZero =
true,
11021 #ifdef UA_ENABLE_TYPENAMES 11022 .memberName =
"diagnosticInfos",
11024 .namespaceZero =
true,
11032 #ifdef UA_ENABLE_TYPENAMES 11033 .memberName =
"responseHeader",
11035 .namespaceZero =
true,
11040 #ifdef UA_ENABLE_TYPENAMES 11041 .memberName =
"notificationMessage",
11043 .namespaceZero =
true,
11051 #ifdef UA_ENABLE_TYPENAMES 11052 .memberName =
"itemToMonitor",
11054 .namespaceZero =
true,
11059 #ifdef UA_ENABLE_TYPENAMES 11060 .memberName =
"monitoringMode",
11062 .namespaceZero =
true,
11067 #ifdef UA_ENABLE_TYPENAMES 11068 .memberName =
"requestedParameters",
11070 .namespaceZero =
true,
11078 #ifdef UA_ENABLE_TYPENAMES 11079 .memberName =
"requestHeader",
11081 .namespaceZero =
true,
11086 #ifdef UA_ENABLE_TYPENAMES 11087 .memberName =
"referencesToDelete",
11089 .namespaceZero =
true,
11097 #ifdef UA_ENABLE_TYPENAMES 11098 .memberName =
"responseHeader",
11100 .namespaceZero =
true,
11105 #ifdef UA_ENABLE_TYPENAMES 11106 .memberName =
"results",
11108 .namespaceZero =
true,
11113 #ifdef UA_ENABLE_TYPENAMES 11114 .memberName =
"diagnosticInfos",
11116 .namespaceZero =
true,
11124 #ifdef UA_ENABLE_TYPENAMES 11125 .memberName =
"responseHeader",
11127 .namespaceZero =
true,
11132 #ifdef UA_ENABLE_TYPENAMES 11133 .memberName =
"results",
11135 .namespaceZero =
true,
11140 #ifdef UA_ENABLE_TYPENAMES 11141 .memberName =
"diagnosticInfos",
11143 .namespaceZero =
true,
11151 #ifdef UA_ENABLE_TYPENAMES 11152 .memberName =
"requestHeader",
11154 .namespaceZero =
true,
11159 #ifdef UA_ENABLE_TYPENAMES 11160 .memberName =
"referencesToAdd",
11162 .namespaceZero =
true,
11170 #ifdef UA_ENABLE_TYPENAMES 11171 .memberName =
"requestHeader",
11173 .namespaceZero =
true,
11178 #ifdef UA_ENABLE_TYPENAMES 11179 .memberName =
"maxAge",
11181 .namespaceZero =
true,
11186 #ifdef UA_ENABLE_TYPENAMES 11187 .memberName =
"timestampsToReturn",
11189 .namespaceZero =
true,
11194 #ifdef UA_ENABLE_TYPENAMES 11195 .memberName =
"nodesToRead",
11197 .namespaceZero =
true,
11205 #ifdef UA_ENABLE_TYPENAMES 11206 .memberName =
"parentNodeId",
11208 .namespaceZero =
true,
11213 #ifdef UA_ENABLE_TYPENAMES 11214 .memberName =
"referenceTypeId",
11216 .namespaceZero =
true,
11221 #ifdef UA_ENABLE_TYPENAMES 11222 .memberName =
"requestedNewNodeId",
11224 .namespaceZero =
true,
11229 #ifdef UA_ENABLE_TYPENAMES 11230 .memberName =
"browseName",
11232 .namespaceZero =
true,
11237 #ifdef UA_ENABLE_TYPENAMES 11238 .memberName =
"nodeClass",
11240 .namespaceZero =
true,
11245 #ifdef UA_ENABLE_TYPENAMES 11246 .memberName =
"nodeAttributes",
11248 .namespaceZero =
true,
11253 #ifdef UA_ENABLE_TYPENAMES 11254 .memberName =
"typeDefinition",
11256 .namespaceZero =
true,
11264 #ifdef UA_ENABLE_TYPENAMES 11265 .memberName =
"startTime",
11267 .namespaceZero =
true,
11272 #ifdef UA_ENABLE_TYPENAMES 11273 .memberName =
"currentTime",
11275 .namespaceZero =
true,
11280 #ifdef UA_ENABLE_TYPENAMES 11281 .memberName =
"state",
11283 .namespaceZero =
true,
11288 #ifdef UA_ENABLE_TYPENAMES 11289 .memberName =
"buildInfo",
11291 .namespaceZero =
true,
11296 #ifdef UA_ENABLE_TYPENAMES 11297 .memberName =
"secondsTillShutdown",
11299 .namespaceZero =
true,
11304 #ifdef UA_ENABLE_TYPENAMES 11305 .memberName =
"shutdownReason",
11307 .namespaceZero =
true,
11315 #ifdef UA_ENABLE_TYPENAMES 11316 .memberName =
"responseHeader",
11318 .namespaceZero =
true,
11323 #ifdef UA_ENABLE_TYPENAMES 11324 .memberName =
"results",
11326 .namespaceZero =
true,
11331 #ifdef UA_ENABLE_TYPENAMES 11332 .memberName =
"diagnosticInfos",
11334 .namespaceZero =
true,
11342 #ifdef UA_ENABLE_TYPENAMES 11343 .memberName =
"responseHeader",
11345 .namespaceZero =
true,
11350 #ifdef UA_ENABLE_TYPENAMES 11351 .memberName =
"results",
11353 .namespaceZero =
true,
11358 #ifdef UA_ENABLE_TYPENAMES 11359 .memberName =
"diagnosticInfos",
11361 .namespaceZero =
true,
11369 #ifdef UA_ENABLE_TYPENAMES 11370 .memberName =
"trigger",
11372 .namespaceZero =
true,
11377 #ifdef UA_ENABLE_TYPENAMES 11378 .memberName =
"deadbandType",
11380 .namespaceZero =
true,
11385 #ifdef UA_ENABLE_TYPENAMES 11386 .memberName =
"deadbandValue",
11388 .namespaceZero =
true,
11396 #ifdef UA_ENABLE_TYPENAMES 11397 .memberName =
"filterOperator",
11399 .namespaceZero =
true,
11404 #ifdef UA_ENABLE_TYPENAMES 11405 .memberName =
"filterOperands",
11407 .namespaceZero =
true,
11415 #ifdef UA_ENABLE_TYPENAMES 11416 .memberName =
"responseHeader",
11418 .namespaceZero =
true,
11426 #ifdef UA_ENABLE_TYPENAMES 11427 .memberName =
"applicationUri",
11429 .namespaceZero =
true,
11434 #ifdef UA_ENABLE_TYPENAMES 11435 .memberName =
"productUri",
11437 .namespaceZero =
true,
11442 #ifdef UA_ENABLE_TYPENAMES 11443 .memberName =
"applicationName",
11445 .namespaceZero =
true,
11450 #ifdef UA_ENABLE_TYPENAMES 11451 .memberName =
"applicationType",
11453 .namespaceZero =
true,
11458 #ifdef UA_ENABLE_TYPENAMES 11459 .memberName =
"gatewayServerUri",
11461 .namespaceZero =
true,
11466 #ifdef UA_ENABLE_TYPENAMES 11467 .memberName =
"discoveryProfileUri",
11469 .namespaceZero =
true,
11474 #ifdef UA_ENABLE_TYPENAMES 11475 .memberName =
"discoveryUrls",
11477 .namespaceZero =
true,
11485 #ifdef UA_ENABLE_TYPENAMES 11486 .memberName =
"responseHeader",
11488 .namespaceZero =
true,
11496 #ifdef UA_ENABLE_TYPENAMES 11497 .memberName =
"responseHeader",
11499 .namespaceZero =
true,
11504 #ifdef UA_ENABLE_TYPENAMES 11505 .memberName =
"servers",
11507 .namespaceZero =
true,
11515 #ifdef UA_ENABLE_TYPENAMES 11516 .memberName =
"requestHeader",
11518 .namespaceZero =
true,
11523 #ifdef UA_ENABLE_TYPENAMES 11524 .memberName =
"subscriptionId",
11526 .namespaceZero =
true,
11531 #ifdef UA_ENABLE_TYPENAMES 11532 .memberName =
"timestampsToReturn",
11534 .namespaceZero =
true,
11539 #ifdef UA_ENABLE_TYPENAMES 11540 .memberName =
"itemsToCreate",
11542 .namespaceZero =
true,
11550 #ifdef UA_ENABLE_TYPENAMES 11551 .memberName =
"elements",
11553 .namespaceZero =
true,
11561 #ifdef UA_ENABLE_TYPENAMES 11562 .memberName =
"responseHeader",
11564 .namespaceZero =
true,
11569 #ifdef UA_ENABLE_TYPENAMES 11570 .memberName =
"queryDataSets",
11572 .namespaceZero =
true,
11577 #ifdef UA_ENABLE_TYPENAMES 11578 .memberName =
"continuationPoint",
11580 .namespaceZero =
true,
11585 #ifdef UA_ENABLE_TYPENAMES 11586 .memberName =
"parsingResults",
11588 .namespaceZero =
true,
11593 #ifdef UA_ENABLE_TYPENAMES 11594 .memberName =
"diagnosticInfos",
11596 .namespaceZero =
true,
11601 #ifdef UA_ENABLE_TYPENAMES 11602 .memberName =
"filterResult",
11604 .namespaceZero =
true,
11612 #ifdef UA_ENABLE_TYPENAMES 11613 .memberName =
"requestHeader",
11615 .namespaceZero =
true,
11620 #ifdef UA_ENABLE_TYPENAMES 11621 .memberName =
"nodesToAdd",
11623 .namespaceZero =
true,
11631 #ifdef UA_ENABLE_TYPENAMES 11632 .memberName =
"requestHeader",
11634 .namespaceZero =
true,
11639 #ifdef UA_ENABLE_TYPENAMES 11640 .memberName =
"view",
11642 .namespaceZero =
true,
11647 #ifdef UA_ENABLE_TYPENAMES 11648 .memberName =
"requestedMaxReferencesPerNode",
11650 .namespaceZero =
true,
11655 #ifdef UA_ENABLE_TYPENAMES 11656 .memberName =
"nodesToBrowse",
11658 .namespaceZero =
true,
11666 #ifdef UA_ENABLE_TYPENAMES 11667 .memberName =
"startingNode",
11669 .namespaceZero =
true,
11674 #ifdef UA_ENABLE_TYPENAMES 11675 .memberName =
"relativePath",
11677 .namespaceZero =
true,
11685 #ifdef UA_ENABLE_TYPENAMES 11686 .memberName =
"statusCode",
11688 .namespaceZero =
true,
11693 #ifdef UA_ENABLE_TYPENAMES 11694 .memberName =
"continuationPoint",
11696 .namespaceZero =
true,
11701 #ifdef UA_ENABLE_TYPENAMES 11702 .memberName =
"references",
11704 .namespaceZero =
true,
11712 #ifdef UA_ENABLE_TYPENAMES 11713 .memberName =
"requestHeader",
11715 .namespaceZero =
true,
11720 #ifdef UA_ENABLE_TYPENAMES 11721 .memberName =
"clientDescription",
11723 .namespaceZero =
true,
11728 #ifdef UA_ENABLE_TYPENAMES 11729 .memberName =
"serverUri",
11731 .namespaceZero =
true,
11736 #ifdef UA_ENABLE_TYPENAMES 11737 .memberName =
"endpointUrl",
11739 .namespaceZero =
true,
11744 #ifdef UA_ENABLE_TYPENAMES 11745 .memberName =
"sessionName",
11747 .namespaceZero =
true,
11752 #ifdef UA_ENABLE_TYPENAMES 11753 .memberName =
"clientNonce",
11755 .namespaceZero =
true,
11760 #ifdef UA_ENABLE_TYPENAMES 11761 .memberName =
"clientCertificate",
11763 .namespaceZero =
true,
11768 #ifdef UA_ENABLE_TYPENAMES 11769 .memberName =
"requestedSessionTimeout",
11771 .namespaceZero =
true,
11776 #ifdef UA_ENABLE_TYPENAMES 11777 .memberName =
"maxResponseMessageSize",
11779 .namespaceZero =
true,
11787 #ifdef UA_ENABLE_TYPENAMES 11788 .memberName =
"relativePath",
11790 .namespaceZero =
true,
11795 #ifdef UA_ENABLE_TYPENAMES 11796 .memberName =
"attributeId",
11798 .namespaceZero =
true,
11803 #ifdef UA_ENABLE_TYPENAMES 11804 .memberName =
"indexRange",
11806 .namespaceZero =
true,
11814 #ifdef UA_ENABLE_TYPENAMES 11815 .memberName =
"endpointUrl",
11817 .namespaceZero =
true,
11822 #ifdef UA_ENABLE_TYPENAMES 11823 .memberName =
"server",
11825 .namespaceZero =
true,
11830 #ifdef UA_ENABLE_TYPENAMES 11831 .memberName =
"serverCertificate",
11833 .namespaceZero =
true,
11838 #ifdef UA_ENABLE_TYPENAMES 11839 .memberName =
"securityMode",
11841 .namespaceZero =
true,
11846 #ifdef UA_ENABLE_TYPENAMES 11847 .memberName =
"securityPolicyUri",
11849 .namespaceZero =
true,
11854 #ifdef UA_ENABLE_TYPENAMES 11855 .memberName =
"userIdentityTokens",
11857 .namespaceZero =
true,
11862 #ifdef UA_ENABLE_TYPENAMES 11863 .memberName =
"transportProfileUri",
11865 .namespaceZero =
true,
11870 #ifdef UA_ENABLE_TYPENAMES 11871 .memberName =
"securityLevel",
11873 .namespaceZero =
true,
11881 #ifdef UA_ENABLE_TYPENAMES 11882 .memberName =
"responseHeader",
11884 .namespaceZero =
true,
11889 #ifdef UA_ENABLE_TYPENAMES 11890 .memberName =
"endpoints",
11892 .namespaceZero =
true,
11900 #ifdef UA_ENABLE_TYPENAMES 11901 .memberName =
"typeDefinitionNode",
11903 .namespaceZero =
true,
11908 #ifdef UA_ENABLE_TYPENAMES 11909 .memberName =
"includeSubTypes",
11911 .namespaceZero =
true,
11916 #ifdef UA_ENABLE_TYPENAMES 11917 .memberName =
"dataToReturn",
11919 .namespaceZero =
true,
11927 #ifdef UA_ENABLE_TYPENAMES 11928 .memberName =
"responseHeader",
11930 .namespaceZero =
true,
11935 #ifdef UA_ENABLE_TYPENAMES 11936 .memberName =
"results",
11938 .namespaceZero =
true,
11943 #ifdef UA_ENABLE_TYPENAMES 11944 .memberName =
"diagnosticInfos",
11946 .namespaceZero =
true,
11954 #ifdef UA_ENABLE_TYPENAMES 11955 .memberName =
"requestHeader",
11957 .namespaceZero =
true,
11962 #ifdef UA_ENABLE_TYPENAMES 11963 .memberName =
"browsePaths",
11965 .namespaceZero =
true,
11973 #ifdef UA_ENABLE_TYPENAMES 11974 .memberName =
"responseHeader",
11976 .namespaceZero =
true,
11981 #ifdef UA_ENABLE_TYPENAMES 11982 .memberName =
"results",
11984 .namespaceZero =
true,
11989 #ifdef UA_ENABLE_TYPENAMES 11990 .memberName =
"diagnosticInfos",
11992 .namespaceZero =
true,
12000 #ifdef UA_ENABLE_TYPENAMES 12001 .memberName =
"responseHeader",
12003 .namespaceZero =
true,
12008 #ifdef UA_ENABLE_TYPENAMES 12009 .memberName =
"sessionId",
12011 .namespaceZero =
true,
12016 #ifdef UA_ENABLE_TYPENAMES 12017 .memberName =
"authenticationToken",
12019 .namespaceZero =
true,
12024 #ifdef UA_ENABLE_TYPENAMES 12025 .memberName =
"revisedSessionTimeout",
12027 .namespaceZero =
true,
12032 #ifdef UA_ENABLE_TYPENAMES 12033 .memberName =
"serverNonce",
12035 .namespaceZero =
true,
12040 #ifdef UA_ENABLE_TYPENAMES 12041 .memberName =
"serverCertificate",
12043 .namespaceZero =
true,
12048 #ifdef UA_ENABLE_TYPENAMES 12049 .memberName =
"serverEndpoints",
12051 .namespaceZero =
true,
12056 #ifdef UA_ENABLE_TYPENAMES 12057 .memberName =
"serverSoftwareCertificates",
12059 .namespaceZero =
true,
12064 #ifdef UA_ENABLE_TYPENAMES 12065 .memberName =
"serverSignature",
12067 .namespaceZero =
true,
12072 #ifdef UA_ENABLE_TYPENAMES 12073 .memberName =
"maxRequestMessageSize",
12075 .namespaceZero =
true,
12083 #ifdef UA_ENABLE_TYPENAMES 12084 .memberName =
"requestHeader",
12086 .namespaceZero =
true,
12091 #ifdef UA_ENABLE_TYPENAMES 12092 .memberName =
"view",
12094 .namespaceZero =
true,
12099 #ifdef UA_ENABLE_TYPENAMES 12100 .memberName =
"nodeTypes",
12102 .namespaceZero =
true,
12107 #ifdef UA_ENABLE_TYPENAMES 12108 .memberName =
"filter",
12110 .namespaceZero =
true,
12115 #ifdef UA_ENABLE_TYPENAMES 12116 .memberName =
"maxDataSetsToReturn",
12118 .namespaceZero =
true,
12123 #ifdef UA_ENABLE_TYPENAMES 12124 .memberName =
"maxReferencesToReturn",
12126 .namespaceZero =
true,
12135 #ifdef UA_ENABLE_TYPENAMES 12136 .typeName =
"Boolean",
12141 .overlayable =
true,
12142 .binaryEncodingId = 0,
12144 .members = Boolean_members },
12147 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 2},
12149 #ifdef UA_ENABLE_TYPENAMES 12150 .typeName =
"SByte",
12155 .overlayable =
true,
12156 .binaryEncodingId = 0,
12158 .members = SByte_members },
12161 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 3},
12163 #ifdef UA_ENABLE_TYPENAMES 12164 .typeName =
"Byte",
12169 .overlayable =
true,
12170 .binaryEncodingId = 0,
12172 .members = Byte_members },
12175 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 4},
12177 #ifdef UA_ENABLE_TYPENAMES 12178 .typeName =
"Int16",
12184 .binaryEncodingId = 0,
12186 .members = Int16_members },
12189 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 5},
12191 #ifdef UA_ENABLE_TYPENAMES 12192 .typeName =
"UInt16",
12198 .binaryEncodingId = 0,
12200 .members = UInt16_members },
12203 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12205 #ifdef UA_ENABLE_TYPENAMES 12206 .typeName =
"Int32",
12212 .binaryEncodingId = 0,
12214 .members = Int32_members },
12217 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 7},
12219 #ifdef UA_ENABLE_TYPENAMES 12220 .typeName =
"UInt32",
12226 .binaryEncodingId = 0,
12228 .members = UInt32_members },
12231 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 8},
12233 #ifdef UA_ENABLE_TYPENAMES 12234 .typeName =
"Int64",
12240 .binaryEncodingId = 0,
12242 .members = Int64_members },
12245 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 9},
12247 #ifdef UA_ENABLE_TYPENAMES 12248 .typeName =
"UInt64",
12254 .binaryEncodingId = 0,
12256 .members = UInt64_members },
12259 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 10},
12261 #ifdef UA_ENABLE_TYPENAMES 12262 .typeName =
"Float",
12268 .binaryEncodingId = 0,
12270 .members = Float_members },
12273 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 11},
12275 #ifdef UA_ENABLE_TYPENAMES 12276 .typeName =
"Double",
12282 .binaryEncodingId = 0,
12284 .members = Double_members },
12287 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 12},
12289 #ifdef UA_ENABLE_TYPENAMES 12290 .typeName =
"String",
12294 .fixedSize =
false,
12295 .overlayable =
false,
12296 .binaryEncodingId = 0,
12298 .members = String_members },
12301 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 13},
12303 #ifdef UA_ENABLE_TYPENAMES 12304 .typeName =
"DateTime",
12310 .binaryEncodingId = 0,
12312 .members = DateTime_members },
12315 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 14},
12317 #ifdef UA_ENABLE_TYPENAMES 12318 .typeName =
"Guid",
12324 .binaryEncodingId = 0,
12326 .members = Guid_members },
12329 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 15},
12331 #ifdef UA_ENABLE_TYPENAMES 12332 .typeName =
"ByteString",
12336 .fixedSize =
false,
12337 .overlayable =
false,
12338 .binaryEncodingId = 0,
12340 .members = ByteString_members },
12343 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 16},
12345 #ifdef UA_ENABLE_TYPENAMES 12346 .typeName =
"XmlElement",
12350 .fixedSize =
false,
12351 .overlayable =
false,
12352 .binaryEncodingId = 0,
12354 .members = XmlElement_members },
12357 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 17},
12359 #ifdef UA_ENABLE_TYPENAMES 12360 .typeName =
"NodeId",
12364 .fixedSize =
false,
12365 .overlayable =
false,
12366 .binaryEncodingId = 0,
12368 .members = NodeId_members },
12371 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 18},
12373 #ifdef UA_ENABLE_TYPENAMES 12374 .typeName =
"ExpandedNodeId",
12378 .fixedSize =
false,
12379 .overlayable =
false,
12380 .binaryEncodingId = 0,
12382 .members = ExpandedNodeId_members },
12385 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 19},
12387 #ifdef UA_ENABLE_TYPENAMES 12388 .typeName =
"StatusCode",
12394 .binaryEncodingId = 0,
12396 .members = StatusCode_members },
12399 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 20},
12401 #ifdef UA_ENABLE_TYPENAMES 12402 .typeName =
"QualifiedName",
12406 .fixedSize =
false,
12407 .overlayable =
false,
12408 .binaryEncodingId = 0,
12410 .members = QualifiedName_members },
12413 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 21},
12415 #ifdef UA_ENABLE_TYPENAMES 12416 .typeName =
"LocalizedText",
12420 .fixedSize =
false,
12421 .overlayable =
false,
12422 .binaryEncodingId = 0,
12424 .members = LocalizedText_members },
12427 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 22},
12429 #ifdef UA_ENABLE_TYPENAMES 12430 .typeName =
"ExtensionObject",
12434 .fixedSize =
false,
12435 .overlayable =
false,
12436 .binaryEncodingId = 0,
12438 .members = ExtensionObject_members },
12441 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 23},
12443 #ifdef UA_ENABLE_TYPENAMES 12444 .typeName =
"DataValue",
12448 .fixedSize =
false,
12449 .overlayable =
false,
12450 .binaryEncodingId = 0,
12452 .members = DataValue_members },
12455 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 24},
12457 #ifdef UA_ENABLE_TYPENAMES 12458 .typeName =
"Variant",
12462 .fixedSize =
false,
12463 .overlayable =
false,
12464 .binaryEncodingId = 0,
12466 .members = Variant_members },
12469 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 25},
12471 #ifdef UA_ENABLE_TYPENAMES 12472 .typeName =
"DiagnosticInfo",
12476 .fixedSize =
false,
12477 .overlayable =
false,
12478 .binaryEncodingId = 0,
12480 .members = DiagnosticInfo_members },
12483 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 344},
12485 #ifdef UA_ENABLE_TYPENAMES 12486 .typeName =
"SignedSoftwareCertificate",
12490 .fixedSize =
false,
12491 .overlayable =
false,
12492 .binaryEncodingId = 346,
12494 .members = SignedSoftwareCertificate_members },
12497 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 546},
12499 #ifdef UA_ENABLE_TYPENAMES 12500 .typeName =
"BrowsePathTarget",
12504 .fixedSize =
false,
12505 .overlayable =
false,
12506 .binaryEncodingId = 548,
12508 .members = BrowsePathTarget_members },
12511 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 373},
12513 #ifdef UA_ENABLE_TYPENAMES 12514 .typeName =
"ViewAttributes",
12518 .fixedSize =
false,
12519 .overlayable =
false,
12520 .binaryEncodingId = 375,
12522 .members = ViewAttributes_members },
12525 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12527 #ifdef UA_ENABLE_TYPENAMES 12528 .typeName =
"BrowseResultMask",
12534 .binaryEncodingId = 0,
12536 .members = BrowseResultMask_members },
12539 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 389},
12541 #ifdef UA_ENABLE_TYPENAMES 12542 .typeName =
"RequestHeader",
12546 .fixedSize =
false,
12547 .overlayable =
false,
12548 .binaryEncodingId = 391,
12550 .members = RequestHeader_members },
12553 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 758},
12555 #ifdef UA_ENABLE_TYPENAMES 12556 .typeName =
"MonitoredItemModifyResult",
12560 .fixedSize =
false,
12561 .overlayable =
false,
12562 .binaryEncodingId = 760,
12564 .members = MonitoredItemModifyResult_members },
12567 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 450},
12569 #ifdef UA_ENABLE_TYPENAMES 12570 .typeName =
"CloseSecureChannelRequest",
12574 .fixedSize =
false,
12575 .overlayable =
false,
12576 .binaryEncodingId = 452,
12578 .members = CloseSecureChannelRequest_members },
12581 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 483},
12583 #ifdef UA_ENABLE_TYPENAMES 12584 .typeName =
"AddNodesResult",
12588 .fixedSize =
false,
12589 .overlayable =
false,
12590 .binaryEncodingId = 485,
12592 .members = AddNodesResult_members },
12595 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 355},
12597 #ifdef UA_ENABLE_TYPENAMES 12598 .typeName =
"VariableAttributes",
12602 .fixedSize =
false,
12603 .overlayable =
false,
12604 .binaryEncodingId = 357,
12606 .members = VariableAttributes_members },
12609 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 803},
12611 #ifdef UA_ENABLE_TYPENAMES 12612 .typeName =
"NotificationMessage",
12616 .fixedSize =
false,
12617 .overlayable =
false,
12618 .binaryEncodingId = 805,
12620 .members = NotificationMessage_members },
12623 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12625 #ifdef UA_ENABLE_TYPENAMES 12626 .typeName =
"NodeAttributesMask",
12632 .binaryEncodingId = 0,
12634 .members = NodeAttributesMask_members },
12637 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12639 #ifdef UA_ENABLE_TYPENAMES 12640 .typeName =
"MonitoringMode",
12646 .binaryEncodingId = 0,
12648 .members = MonitoringMode_members },
12651 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 707},
12653 #ifdef UA_ENABLE_TYPENAMES 12654 .typeName =
"CallMethodResult",
12658 .fixedSize =
false,
12659 .overlayable =
false,
12660 .binaryEncodingId = 709,
12662 .members = CallMethodResult_members },
12665 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 610},
12667 #ifdef UA_ENABLE_TYPENAMES 12668 .typeName =
"ParsingResult",
12672 .fixedSize =
false,
12673 .overlayable =
false,
12674 .binaryEncodingId = 612,
12676 .members = ParsingResult_members },
12679 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 537},
12681 #ifdef UA_ENABLE_TYPENAMES 12682 .typeName =
"RelativePathElement",
12686 .fixedSize =
false,
12687 .overlayable =
false,
12688 .binaryEncodingId = 539,
12690 .members = RelativePathElement_members },
12693 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12695 #ifdef UA_ENABLE_TYPENAMES 12696 .typeName =
"BrowseDirection",
12702 .binaryEncodingId = 0,
12704 .members = BrowseDirection_members },
12707 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 704},
12709 #ifdef UA_ENABLE_TYPENAMES 12710 .typeName =
"CallMethodRequest",
12714 .fixedSize =
false,
12715 .overlayable =
false,
12716 .binaryEncodingId = 706,
12718 .members = CallMethodRequest_members },
12721 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 564},
12723 #ifdef UA_ENABLE_TYPENAMES 12724 .typeName =
"UnregisterNodesRequest",
12728 .fixedSize =
false,
12729 .overlayable =
false,
12730 .binaryEncodingId = 566,
12732 .members = UnregisterNodesRequest_members },
12735 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 604},
12737 #ifdef UA_ENABLE_TYPENAMES 12738 .typeName =
"ContentFilterElementResult",
12742 .fixedSize =
false,
12743 .overlayable =
false,
12744 .binaryEncodingId = 606,
12746 .members = ContentFilterElementResult_members },
12749 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 577},
12751 #ifdef UA_ENABLE_TYPENAMES 12752 .typeName =
"QueryDataSet",
12756 .fixedSize =
false,
12757 .overlayable =
false,
12758 .binaryEncodingId = 579,
12760 .members = QueryDataSet_members },
12763 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 319},
12765 #ifdef UA_ENABLE_TYPENAMES 12766 .typeName =
"AnonymousIdentityToken",
12770 .fixedSize =
false,
12771 .overlayable =
false,
12772 .binaryEncodingId = 321,
12774 .members = AnonymousIdentityToken_members },
12777 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 797},
12779 #ifdef UA_ENABLE_TYPENAMES 12780 .typeName =
"SetPublishingModeRequest",
12784 .fixedSize =
false,
12785 .overlayable =
false,
12786 .binaryEncodingId = 799,
12788 .members = SetPublishingModeRequest_members },
12791 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12793 #ifdef UA_ENABLE_TYPENAMES 12794 .typeName =
"TimestampsToReturn",
12800 .binaryEncodingId = 0,
12802 .members = TimestampsToReturn_members },
12805 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 710},
12807 #ifdef UA_ENABLE_TYPENAMES 12808 .typeName =
"CallRequest",
12812 .fixedSize =
false,
12813 .overlayable =
false,
12814 .binaryEncodingId = 712,
12816 .members = CallRequest_members },
12819 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 358},
12821 #ifdef UA_ENABLE_TYPENAMES 12822 .typeName =
"MethodAttributes",
12826 .fixedSize =
false,
12827 .overlayable =
false,
12828 .binaryEncodingId = 360,
12830 .members = MethodAttributes_members },
12833 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 385},
12835 #ifdef UA_ENABLE_TYPENAMES 12836 .typeName =
"DeleteReferencesItem",
12840 .fixedSize =
false,
12841 .overlayable =
false,
12842 .binaryEncodingId = 387,
12844 .members = DeleteReferencesItem_members },
12847 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 668},
12849 #ifdef UA_ENABLE_TYPENAMES 12850 .typeName =
"WriteValue",
12854 .fixedSize =
false,
12855 .overlayable =
false,
12856 .binaryEncodingId = 670,
12858 .members = WriteValue_members },
12861 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 746},
12863 #ifdef UA_ENABLE_TYPENAMES 12864 .typeName =
"MonitoredItemCreateResult",
12868 .fixedSize =
false,
12869 .overlayable =
false,
12870 .binaryEncodingId = 748,
12872 .members = MonitoredItemCreateResult_members },
12875 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12877 #ifdef UA_ENABLE_TYPENAMES 12878 .typeName =
"MessageSecurityMode",
12884 .binaryEncodingId = 0,
12886 .members = MessageSecurityMode_members },
12889 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 740},
12891 #ifdef UA_ENABLE_TYPENAMES 12892 .typeName =
"MonitoringParameters",
12896 .fixedSize =
false,
12897 .overlayable =
false,
12898 .binaryEncodingId = 742,
12900 .members = MonitoringParameters_members },
12903 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 456},
12905 #ifdef UA_ENABLE_TYPENAMES 12906 .typeName =
"SignatureData",
12910 .fixedSize =
false,
12911 .overlayable =
false,
12912 .binaryEncodingId = 458,
12914 .members = SignatureData_members },
12917 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 285},
12919 #ifdef UA_ENABLE_TYPENAMES 12920 .typeName =
"ReferenceNode",
12924 .fixedSize =
false,
12925 .overlayable =
false,
12926 .binaryEncodingId = 287,
12928 .members = ReferenceNode_members },
12931 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 296},
12933 #ifdef UA_ENABLE_TYPENAMES 12934 .typeName =
"Argument",
12938 .fixedSize =
false,
12939 .overlayable =
false,
12940 .binaryEncodingId = 298,
12942 .members = Argument_members },
12945 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 316},
12947 #ifdef UA_ENABLE_TYPENAMES 12948 .typeName =
"UserIdentityToken",
12952 .fixedSize =
false,
12953 .overlayable =
false,
12954 .binaryEncodingId = 318,
12956 .members = UserIdentityToken_members },
12959 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 361},
12961 #ifdef UA_ENABLE_TYPENAMES 12962 .typeName =
"ObjectTypeAttributes",
12966 .fixedSize =
false,
12967 .overlayable =
false,
12968 .binaryEncodingId = 363,
12970 .members = ObjectTypeAttributes_members },
12973 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12975 #ifdef UA_ENABLE_TYPENAMES 12976 .typeName =
"DeadbandType",
12982 .binaryEncodingId = 0,
12984 .members = DeadbandType_members },
12987 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12989 #ifdef UA_ENABLE_TYPENAMES 12990 .typeName =
"SecurityTokenRequestType",
12996 .binaryEncodingId = 0,
12998 .members = SecurityTokenRequestType_members },
13001 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13003 #ifdef UA_ENABLE_TYPENAMES 13004 .typeName =
"DataChangeTrigger",
13010 .binaryEncodingId = 0,
13012 .members = DataChangeTrigger_members },
13015 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 338},
13017 #ifdef UA_ENABLE_TYPENAMES 13018 .typeName =
"BuildInfo",
13022 .fixedSize =
false,
13023 .overlayable =
false,
13024 .binaryEncodingId = 340,
13026 .members = BuildInfo_members },
13029 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13031 #ifdef UA_ENABLE_TYPENAMES 13032 .typeName =
"NodeClass",
13038 .binaryEncodingId = 0,
13040 .members = NodeClass_members },
13043 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 441},
13045 #ifdef UA_ENABLE_TYPENAMES 13046 .typeName =
"ChannelSecurityToken",
13052 .binaryEncodingId = 443,
13054 .members = ChannelSecurityToken_members },
13057 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 806},
13059 #ifdef UA_ENABLE_TYPENAMES 13060 .typeName =
"MonitoredItemNotification",
13064 .fixedSize =
false,
13065 .overlayable =
false,
13066 .binaryEncodingId = 808,
13068 .members = MonitoredItemNotification_members },
13071 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 382},
13073 #ifdef UA_ENABLE_TYPENAMES 13074 .typeName =
"DeleteNodesItem",
13078 .fixedSize =
false,
13079 .overlayable =
false,
13080 .binaryEncodingId = 384,
13082 .members = DeleteNodesItem_members },
13085 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 821},
13087 #ifdef UA_ENABLE_TYPENAMES 13088 .typeName =
"SubscriptionAcknowledgement",
13094 .binaryEncodingId = 823,
13096 .members = SubscriptionAcknowledgement_members },
13099 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 626},
13101 #ifdef UA_ENABLE_TYPENAMES 13102 .typeName =
"ReadValueId",
13106 .fixedSize =
false,
13107 .overlayable =
false,
13108 .binaryEncodingId = 628,
13110 .members = ReadValueId_members },
13113 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 370},
13115 #ifdef UA_ENABLE_TYPENAMES 13116 .typeName =
"DataTypeAttributes",
13120 .fixedSize =
false,
13121 .overlayable =
false,
13122 .binaryEncodingId = 372,
13124 .members = DataTypeAttributes_members },
13127 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 392},
13129 #ifdef UA_ENABLE_TYPENAMES 13130 .typeName =
"ResponseHeader",
13134 .fixedSize =
false,
13135 .overlayable =
false,
13136 .binaryEncodingId = 394,
13138 .members = ResponseHeader_members },
13141 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 845},
13143 #ifdef UA_ENABLE_TYPENAMES 13144 .typeName =
"DeleteSubscriptionsRequest",
13148 .fixedSize =
false,
13149 .overlayable =
false,
13150 .binaryEncodingId = 847,
13152 .members = DeleteSubscriptionsRequest_members },
13155 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 511},
13157 #ifdef UA_ENABLE_TYPENAMES 13158 .typeName =
"ViewDescription",
13162 .fixedSize =
false,
13163 .overlayable =
false,
13164 .binaryEncodingId = 513,
13166 .members = ViewDescription_members },
13169 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 782},
13171 #ifdef UA_ENABLE_TYPENAMES 13172 .typeName =
"DeleteMonitoredItemsResponse",
13176 .fixedSize =
false,
13177 .overlayable =
false,
13178 .binaryEncodingId = 784,
13180 .members = DeleteMonitoredItemsResponse_members },
13183 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 349},
13185 #ifdef UA_ENABLE_TYPENAMES 13186 .typeName =
"NodeAttributes",
13190 .fixedSize =
false,
13191 .overlayable =
false,
13192 .binaryEncodingId = 351,
13194 .members = NodeAttributes_members },
13197 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 558},
13199 #ifdef UA_ENABLE_TYPENAMES 13200 .typeName =
"RegisterNodesRequest",
13204 .fixedSize =
false,
13205 .overlayable =
false,
13206 .binaryEncodingId = 560,
13208 .members = RegisterNodesRequest_members },
13211 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 498},
13213 #ifdef UA_ENABLE_TYPENAMES 13214 .typeName =
"DeleteNodesRequest",
13218 .fixedSize =
false,
13219 .overlayable =
false,
13220 .binaryEncodingId = 500,
13222 .members = DeleteNodesRequest_members },
13225 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 827},
13227 #ifdef UA_ENABLE_TYPENAMES 13228 .typeName =
"PublishResponse",
13232 .fixedSize =
false,
13233 .overlayable =
false,
13234 .binaryEncodingId = 829,
13236 .members = PublishResponse_members },
13239 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 755},
13241 #ifdef UA_ENABLE_TYPENAMES 13242 .typeName =
"MonitoredItemModifyRequest",
13246 .fixedSize =
false,
13247 .overlayable =
false,
13248 .binaryEncodingId = 757,
13250 .members = MonitoredItemModifyRequest_members },
13253 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 322},
13255 #ifdef UA_ENABLE_TYPENAMES 13256 .typeName =
"UserNameIdentityToken",
13260 .fixedSize =
false,
13261 .overlayable =
false,
13262 .binaryEncodingId = 324,
13264 .members = UserNameIdentityToken_members },
13267 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13269 #ifdef UA_ENABLE_TYPENAMES 13270 .typeName =
"IdType",
13276 .binaryEncodingId = 0,
13278 .members = IdType_members },
13281 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13283 #ifdef UA_ENABLE_TYPENAMES 13284 .typeName =
"UserTokenType",
13290 .binaryEncodingId = 0,
13292 .members = UserTokenType_members },
13295 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 465},
13297 #ifdef UA_ENABLE_TYPENAMES 13298 .typeName =
"ActivateSessionRequest",
13302 .fixedSize =
false,
13303 .overlayable =
false,
13304 .binaryEncodingId = 467,
13306 .members = ActivateSessionRequest_members },
13309 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 447},
13311 #ifdef UA_ENABLE_TYPENAMES 13312 .typeName =
"OpenSecureChannelResponse",
13316 .fixedSize =
false,
13317 .overlayable =
false,
13318 .binaryEncodingId = 449,
13320 .members = OpenSecureChannelResponse_members },
13323 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13325 #ifdef UA_ENABLE_TYPENAMES 13326 .typeName =
"ApplicationType",
13332 .binaryEncodingId = 0,
13334 .members = ApplicationType_members },
13337 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13339 #ifdef UA_ENABLE_TYPENAMES 13340 .typeName =
"ServerState",
13346 .binaryEncodingId = 0,
13348 .members = ServerState_members },
13351 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 622},
13353 #ifdef UA_ENABLE_TYPENAMES 13354 .typeName =
"QueryNextResponse",
13358 .fixedSize =
false,
13359 .overlayable =
false,
13360 .binaryEncodingId = 624,
13362 .members = QueryNextResponse_members },
13365 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 468},
13367 #ifdef UA_ENABLE_TYPENAMES 13368 .typeName =
"ActivateSessionResponse",
13372 .fixedSize =
false,
13373 .overlayable =
false,
13374 .binaryEncodingId = 470,
13376 .members = ActivateSessionResponse_members },
13379 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13381 #ifdef UA_ENABLE_TYPENAMES 13382 .typeName =
"FilterOperator",
13388 .binaryEncodingId = 0,
13390 .members = FilterOperator_members },
13393 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 619},
13395 #ifdef UA_ENABLE_TYPENAMES 13396 .typeName =
"QueryNextRequest",
13400 .fixedSize =
false,
13401 .overlayable =
false,
13402 .binaryEncodingId = 621,
13404 .members = QueryNextRequest_members },
13407 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 674},
13409 #ifdef UA_ENABLE_TYPENAMES 13410 .typeName =
"WriteResponse",
13414 .fixedSize =
false,
13415 .overlayable =
false,
13416 .binaryEncodingId = 676,
13418 .members = WriteResponse_members },
13421 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 531},
13423 #ifdef UA_ENABLE_TYPENAMES 13424 .typeName =
"BrowseNextRequest",
13428 .fixedSize =
false,
13429 .overlayable =
false,
13430 .binaryEncodingId = 533,
13432 .members = BrowseNextRequest_members },
13435 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 785},
13437 #ifdef UA_ENABLE_TYPENAMES 13438 .typeName =
"CreateSubscriptionRequest",
13442 .fixedSize =
false,
13443 .overlayable =
false,
13444 .binaryEncodingId = 787,
13446 .members = CreateSubscriptionRequest_members },
13449 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 364},
13451 #ifdef UA_ENABLE_TYPENAMES 13452 .typeName =
"VariableTypeAttributes",
13456 .fixedSize =
false,
13457 .overlayable =
false,
13458 .binaryEncodingId = 366,
13460 .members = VariableTypeAttributes_members },
13463 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 549},
13465 #ifdef UA_ENABLE_TYPENAMES 13466 .typeName =
"BrowsePathResult",
13470 .fixedSize =
false,
13471 .overlayable =
false,
13472 .binaryEncodingId = 551,
13474 .members = BrowsePathResult_members },
13477 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 794},
13479 #ifdef UA_ENABLE_TYPENAMES 13480 .typeName =
"ModifySubscriptionResponse",
13484 .fixedSize =
false,
13485 .overlayable =
false,
13486 .binaryEncodingId = 796,
13488 .members = ModifySubscriptionResponse_members },
13491 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 444},
13493 #ifdef UA_ENABLE_TYPENAMES 13494 .typeName =
"OpenSecureChannelRequest",
13498 .fixedSize =
false,
13499 .overlayable =
false,
13500 .binaryEncodingId = 446,
13502 .members = OpenSecureChannelRequest_members },
13505 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 561},
13507 #ifdef UA_ENABLE_TYPENAMES 13508 .typeName =
"RegisterNodesResponse",
13512 .fixedSize =
false,
13513 .overlayable =
false,
13514 .binaryEncodingId = 563,
13516 .members = RegisterNodesResponse_members },
13519 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 471},
13521 #ifdef UA_ENABLE_TYPENAMES 13522 .typeName =
"CloseSessionRequest",
13526 .fixedSize =
false,
13527 .overlayable =
false,
13528 .binaryEncodingId = 473,
13530 .members = CloseSessionRequest_members },
13533 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 791},
13535 #ifdef UA_ENABLE_TYPENAMES 13536 .typeName =
"ModifySubscriptionRequest",
13540 .fixedSize =
false,
13541 .overlayable =
false,
13542 .binaryEncodingId = 793,
13544 .members = ModifySubscriptionRequest_members },
13547 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 304},
13549 #ifdef UA_ENABLE_TYPENAMES 13550 .typeName =
"UserTokenPolicy",
13554 .fixedSize =
false,
13555 .overlayable =
false,
13556 .binaryEncodingId = 306,
13558 .members = UserTokenPolicy_members },
13561 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 779},
13563 #ifdef UA_ENABLE_TYPENAMES 13564 .typeName =
"DeleteMonitoredItemsRequest",
13568 .fixedSize =
false,
13569 .overlayable =
false,
13570 .binaryEncodingId = 781,
13572 .members = DeleteMonitoredItemsRequest_members },
13575 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 367},
13577 #ifdef UA_ENABLE_TYPENAMES 13578 .typeName =
"ReferenceTypeAttributes",
13582 .fixedSize =
false,
13583 .overlayable =
false,
13584 .binaryEncodingId = 369,
13586 .members = ReferenceTypeAttributes_members },
13589 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 767},
13591 #ifdef UA_ENABLE_TYPENAMES 13592 .typeName =
"SetMonitoringModeRequest",
13596 .fixedSize =
false,
13597 .overlayable =
false,
13598 .binaryEncodingId = 769,
13600 .members = SetMonitoringModeRequest_members },
13603 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 567},
13605 #ifdef UA_ENABLE_TYPENAMES 13606 .typeName =
"UnregisterNodesResponse",
13610 .fixedSize =
false,
13611 .overlayable =
false,
13612 .binaryEncodingId = 569,
13614 .members = UnregisterNodesResponse_members },
13617 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 671},
13619 #ifdef UA_ENABLE_TYPENAMES 13620 .typeName =
"WriteRequest",
13624 .fixedSize =
false,
13625 .overlayable =
false,
13626 .binaryEncodingId = 673,
13628 .members = WriteRequest_members },
13631 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 352},
13633 #ifdef UA_ENABLE_TYPENAMES 13634 .typeName =
"ObjectAttributes",
13638 .fixedSize =
false,
13639 .overlayable =
false,
13640 .binaryEncodingId = 354,
13642 .members = ObjectAttributes_members },
13645 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 514},
13647 #ifdef UA_ENABLE_TYPENAMES 13648 .typeName =
"BrowseDescription",
13652 .fixedSize =
false,
13653 .overlayable =
false,
13654 .binaryEncodingId = 516,
13656 .members = BrowseDescription_members },
13659 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 830},
13661 #ifdef UA_ENABLE_TYPENAMES 13662 .typeName =
"RepublishRequest",
13666 .fixedSize =
false,
13667 .overlayable =
false,
13668 .binaryEncodingId = 832,
13670 .members = RepublishRequest_members },
13673 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 426},
13675 #ifdef UA_ENABLE_TYPENAMES 13676 .typeName =
"GetEndpointsRequest",
13680 .fixedSize =
false,
13681 .overlayable =
false,
13682 .binaryEncodingId = 428,
13684 .members = GetEndpointsRequest_members },
13687 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 824},
13689 #ifdef UA_ENABLE_TYPENAMES 13690 .typeName =
"PublishRequest",
13694 .fixedSize =
false,
13695 .overlayable =
false,
13696 .binaryEncodingId = 826,
13698 .members = PublishRequest_members },
13701 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 489},
13703 #ifdef UA_ENABLE_TYPENAMES 13704 .typeName =
"AddNodesResponse",
13708 .fixedSize =
false,
13709 .overlayable =
false,
13710 .binaryEncodingId = 491,
13712 .members = AddNodesResponse_members },
13715 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 809},
13717 #ifdef UA_ENABLE_TYPENAMES 13718 .typeName =
"DataChangeNotification",
13722 .fixedSize =
false,
13723 .overlayable =
false,
13724 .binaryEncodingId = 811,
13726 .members = DataChangeNotification_members },
13729 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 453},
13731 #ifdef UA_ENABLE_TYPENAMES 13732 .typeName =
"CloseSecureChannelResponse",
13736 .fixedSize =
false,
13737 .overlayable =
false,
13738 .binaryEncodingId = 455,
13740 .members = CloseSecureChannelResponse_members },
13743 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 761},
13745 #ifdef UA_ENABLE_TYPENAMES 13746 .typeName =
"ModifyMonitoredItemsRequest",
13750 .fixedSize =
false,
13751 .overlayable =
false,
13752 .binaryEncodingId = 763,
13754 .members = ModifyMonitoredItemsRequest_members },
13757 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 770},
13759 #ifdef UA_ENABLE_TYPENAMES 13760 .typeName =
"SetMonitoringModeResponse",
13764 .fixedSize =
false,
13765 .overlayable =
false,
13766 .binaryEncodingId = 772,
13768 .members = SetMonitoringModeResponse_members },
13771 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 420},
13773 #ifdef UA_ENABLE_TYPENAMES 13774 .typeName =
"FindServersRequest",
13778 .fixedSize =
false,
13779 .overlayable =
false,
13780 .binaryEncodingId = 422,
13782 .members = FindServersRequest_members },
13785 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 518},
13787 #ifdef UA_ENABLE_TYPENAMES 13788 .typeName =
"ReferenceDescription",
13792 .fixedSize =
false,
13793 .overlayable =
false,
13794 .binaryEncodingId = 520,
13796 .members = ReferenceDescription_members },
13799 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 800},
13801 #ifdef UA_ENABLE_TYPENAMES 13802 .typeName =
"SetPublishingModeResponse",
13806 .fixedSize =
false,
13807 .overlayable =
false,
13808 .binaryEncodingId = 802,
13810 .members = SetPublishingModeResponse_members },
13813 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 607},
13815 #ifdef UA_ENABLE_TYPENAMES 13816 .typeName =
"ContentFilterResult",
13820 .fixedSize =
false,
13821 .overlayable =
false,
13822 .binaryEncodingId = 609,
13824 .members = ContentFilterResult_members },
13827 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 379},
13829 #ifdef UA_ENABLE_TYPENAMES 13830 .typeName =
"AddReferencesItem",
13834 .fixedSize =
false,
13835 .overlayable =
false,
13836 .binaryEncodingId = 381,
13838 .members = AddReferencesItem_members },
13841 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 788},
13843 #ifdef UA_ENABLE_TYPENAMES 13844 .typeName =
"CreateSubscriptionResponse",
13848 .fixedSize =
false,
13849 .overlayable =
false,
13850 .binaryEncodingId = 790,
13852 .members = CreateSubscriptionResponse_members },
13855 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 848},
13857 #ifdef UA_ENABLE_TYPENAMES 13858 .typeName =
"DeleteSubscriptionsResponse",
13862 .fixedSize =
false,
13863 .overlayable =
false,
13864 .binaryEncodingId = 850,
13866 .members = DeleteSubscriptionsResponse_members },
13869 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 540},
13871 #ifdef UA_ENABLE_TYPENAMES 13872 .typeName =
"RelativePath",
13876 .fixedSize =
false,
13877 .overlayable =
false,
13878 .binaryEncodingId = 542,
13880 .members = RelativePath_members },
13883 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 507},
13885 #ifdef UA_ENABLE_TYPENAMES 13886 .typeName =
"DeleteReferencesResponse",
13890 .fixedSize =
false,
13891 .overlayable =
false,
13892 .binaryEncodingId = 509,
13894 .members = DeleteReferencesResponse_members },
13897 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 752},
13899 #ifdef UA_ENABLE_TYPENAMES 13900 .typeName =
"CreateMonitoredItemsResponse",
13904 .fixedSize =
false,
13905 .overlayable =
false,
13906 .binaryEncodingId = 754,
13908 .members = CreateMonitoredItemsResponse_members },
13911 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 713},
13913 #ifdef UA_ENABLE_TYPENAMES 13914 .typeName =
"CallResponse",
13918 .fixedSize =
false,
13919 .overlayable =
false,
13920 .binaryEncodingId = 715,
13922 .members = CallResponse_members },
13925 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 501},
13927 #ifdef UA_ENABLE_TYPENAMES 13928 .typeName =
"DeleteNodesResponse",
13932 .fixedSize =
false,
13933 .overlayable =
false,
13934 .binaryEncodingId = 503,
13936 .members = DeleteNodesResponse_members },
13939 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 833},
13941 #ifdef UA_ENABLE_TYPENAMES 13942 .typeName =
"RepublishResponse",
13946 .fixedSize =
false,
13947 .overlayable =
false,
13948 .binaryEncodingId = 835,
13950 .members = RepublishResponse_members },
13953 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 743},
13955 #ifdef UA_ENABLE_TYPENAMES 13956 .typeName =
"MonitoredItemCreateRequest",
13960 .fixedSize =
false,
13961 .overlayable =
false,
13962 .binaryEncodingId = 745,
13964 .members = MonitoredItemCreateRequest_members },
13967 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 504},
13969 #ifdef UA_ENABLE_TYPENAMES 13970 .typeName =
"DeleteReferencesRequest",
13974 .fixedSize =
false,
13975 .overlayable =
false,
13976 .binaryEncodingId = 506,
13978 .members = DeleteReferencesRequest_members },
13981 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 764},
13983 #ifdef UA_ENABLE_TYPENAMES 13984 .typeName =
"ModifyMonitoredItemsResponse",
13988 .fixedSize =
false,
13989 .overlayable =
false,
13990 .binaryEncodingId = 766,
13992 .members = ModifyMonitoredItemsResponse_members },
13995 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 632},
13997 #ifdef UA_ENABLE_TYPENAMES 13998 .typeName =
"ReadResponse",
14002 .fixedSize =
false,
14003 .overlayable =
false,
14004 .binaryEncodingId = 634,
14006 .members = ReadResponse_members },
14009 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 492},
14011 #ifdef UA_ENABLE_TYPENAMES 14012 .typeName =
"AddReferencesRequest",
14016 .fixedSize =
false,
14017 .overlayable =
false,
14018 .binaryEncodingId = 494,
14020 .members = AddReferencesRequest_members },
14023 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 629},
14025 #ifdef UA_ENABLE_TYPENAMES 14026 .typeName =
"ReadRequest",
14030 .fixedSize =
false,
14031 .overlayable =
false,
14032 .binaryEncodingId = 631,
14034 .members = ReadRequest_members },
14037 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 376},
14039 #ifdef UA_ENABLE_TYPENAMES 14040 .typeName =
"AddNodesItem",
14044 .fixedSize =
false,
14045 .overlayable =
false,
14046 .binaryEncodingId = 378,
14048 .members = AddNodesItem_members },
14051 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 862},
14053 #ifdef UA_ENABLE_TYPENAMES 14054 .typeName =
"ServerStatusDataType",
14058 .fixedSize =
false,
14059 .overlayable =
false,
14060 .binaryEncodingId = 864,
14062 .members = ServerStatusDataType_members },
14065 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 495},
14067 #ifdef UA_ENABLE_TYPENAMES 14068 .typeName =
"AddReferencesResponse",
14072 .fixedSize =
false,
14073 .overlayable =
false,
14074 .binaryEncodingId = 497,
14076 .members = AddReferencesResponse_members },
14079 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 555},
14081 #ifdef UA_ENABLE_TYPENAMES 14082 .typeName =
"TranslateBrowsePathsToNodeIdsResponse",
14086 .fixedSize =
false,
14087 .overlayable =
false,
14088 .binaryEncodingId = 557,
14090 .members = TranslateBrowsePathsToNodeIdsResponse_members },
14093 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 722},
14095 #ifdef UA_ENABLE_TYPENAMES 14096 .typeName =
"DataChangeFilter",
14102 .binaryEncodingId = 724,
14104 .members = DataChangeFilter_members },
14107 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 583},
14109 #ifdef UA_ENABLE_TYPENAMES 14110 .typeName =
"ContentFilterElement",
14114 .fixedSize =
false,
14115 .overlayable =
false,
14116 .binaryEncodingId = 585,
14118 .members = ContentFilterElement_members },
14121 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 474},
14123 #ifdef UA_ENABLE_TYPENAMES 14124 .typeName =
"CloseSessionResponse",
14128 .fixedSize =
false,
14129 .overlayable =
false,
14130 .binaryEncodingId = 476,
14132 .members = CloseSessionResponse_members },
14135 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 308},
14137 #ifdef UA_ENABLE_TYPENAMES 14138 .typeName =
"ApplicationDescription",
14142 .fixedSize =
false,
14143 .overlayable =
false,
14144 .binaryEncodingId = 310,
14146 .members = ApplicationDescription_members },
14149 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 395},
14151 #ifdef UA_ENABLE_TYPENAMES 14152 .typeName =
"ServiceFault",
14156 .fixedSize =
false,
14157 .overlayable =
false,
14158 .binaryEncodingId = 397,
14160 .members = ServiceFault_members },
14163 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 423},
14165 #ifdef UA_ENABLE_TYPENAMES 14166 .typeName =
"FindServersResponse",
14170 .fixedSize =
false,
14171 .overlayable =
false,
14172 .binaryEncodingId = 425,
14174 .members = FindServersResponse_members },
14177 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 749},
14179 #ifdef UA_ENABLE_TYPENAMES 14180 .typeName =
"CreateMonitoredItemsRequest",
14184 .fixedSize =
false,
14185 .overlayable =
false,
14186 .binaryEncodingId = 751,
14188 .members = CreateMonitoredItemsRequest_members },
14191 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 586},
14193 #ifdef UA_ENABLE_TYPENAMES 14194 .typeName =
"ContentFilter",
14198 .fixedSize =
false,
14199 .overlayable =
false,
14200 .binaryEncodingId = 588,
14202 .members = ContentFilter_members },
14205 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 616},
14207 #ifdef UA_ENABLE_TYPENAMES 14208 .typeName =
"QueryFirstResponse",
14212 .fixedSize =
false,
14213 .overlayable =
false,
14214 .binaryEncodingId = 618,
14216 .members = QueryFirstResponse_members },
14219 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 486},
14221 #ifdef UA_ENABLE_TYPENAMES 14222 .typeName =
"AddNodesRequest",
14226 .fixedSize =
false,
14227 .overlayable =
false,
14228 .binaryEncodingId = 488,
14230 .members = AddNodesRequest_members },
14233 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 525},
14235 #ifdef UA_ENABLE_TYPENAMES 14236 .typeName =
"BrowseRequest",
14240 .fixedSize =
false,
14241 .overlayable =
false,
14242 .binaryEncodingId = 527,
14244 .members = BrowseRequest_members },
14247 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 543},
14249 #ifdef UA_ENABLE_TYPENAMES 14250 .typeName =
"BrowsePath",
14254 .fixedSize =
false,
14255 .overlayable =
false,
14256 .binaryEncodingId = 545,
14258 .members = BrowsePath_members },
14261 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 522},
14263 #ifdef UA_ENABLE_TYPENAMES 14264 .typeName =
"BrowseResult",
14268 .fixedSize =
false,
14269 .overlayable =
false,
14270 .binaryEncodingId = 524,
14272 .members = BrowseResult_members },
14275 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 459},
14277 #ifdef UA_ENABLE_TYPENAMES 14278 .typeName =
"CreateSessionRequest",
14282 .fixedSize =
false,
14283 .overlayable =
false,
14284 .binaryEncodingId = 461,
14286 .members = CreateSessionRequest_members },
14289 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 570},
14291 #ifdef UA_ENABLE_TYPENAMES 14292 .typeName =
"QueryDataDescription",
14296 .fixedSize =
false,
14297 .overlayable =
false,
14298 .binaryEncodingId = 572,
14300 .members = QueryDataDescription_members },
14303 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 312},
14305 #ifdef UA_ENABLE_TYPENAMES 14306 .typeName =
"EndpointDescription",
14310 .fixedSize =
false,
14311 .overlayable =
false,
14312 .binaryEncodingId = 314,
14314 .members = EndpointDescription_members },
14317 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 429},
14319 #ifdef UA_ENABLE_TYPENAMES 14320 .typeName =
"GetEndpointsResponse",
14324 .fixedSize =
false,
14325 .overlayable =
false,
14326 .binaryEncodingId = 431,
14328 .members = GetEndpointsResponse_members },
14331 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 573},
14333 #ifdef UA_ENABLE_TYPENAMES 14334 .typeName =
"NodeTypeDescription",
14338 .fixedSize =
false,
14339 .overlayable =
false,
14340 .binaryEncodingId = 575,
14342 .members = NodeTypeDescription_members },
14345 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 534},
14347 #ifdef UA_ENABLE_TYPENAMES 14348 .typeName =
"BrowseNextResponse",
14352 .fixedSize =
false,
14353 .overlayable =
false,
14354 .binaryEncodingId = 536,
14356 .members = BrowseNextResponse_members },
14359 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 552},
14361 #ifdef UA_ENABLE_TYPENAMES 14362 .typeName =
"TranslateBrowsePathsToNodeIdsRequest",
14366 .fixedSize =
false,
14367 .overlayable =
false,
14368 .binaryEncodingId = 554,
14370 .members = TranslateBrowsePathsToNodeIdsRequest_members },
14373 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 528},
14375 #ifdef UA_ENABLE_TYPENAMES 14376 .typeName =
"BrowseResponse",
14380 .fixedSize =
false,
14381 .overlayable =
false,
14382 .binaryEncodingId = 530,
14384 .members = BrowseResponse_members },
14387 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 462},
14389 #ifdef UA_ENABLE_TYPENAMES 14390 .typeName =
"CreateSessionResponse",
14394 .fixedSize =
false,
14395 .overlayable =
false,
14396 .binaryEncodingId = 464,
14398 .members = CreateSessionResponse_members },
14401 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 613},
14403 #ifdef UA_ENABLE_TYPENAMES 14404 .typeName =
"QueryFirstRequest",
14408 .fixedSize =
false,
14409 .overlayable =
false,
14410 .binaryEncodingId = 615,
14412 .members = QueryFirstRequest_members },
14425 #ifdef UA_ENABLE_TYPENAMES 14426 .memberName =
"error",
14428 .namespaceZero =
true,
14433 #ifdef UA_ENABLE_TYPENAMES 14434 .memberName =
"reason",
14436 .namespaceZero =
true,
14444 #ifdef UA_ENABLE_TYPENAMES 14445 .memberName =
"padding",
14447 .namespaceZero =
true,
14452 #ifdef UA_ENABLE_TYPENAMES 14453 .memberName =
"signature",
14455 .namespaceZero =
true,
14463 #ifdef UA_ENABLE_TYPENAMES 14464 .memberName =
"protocolVersion",
14466 .namespaceZero =
true,
14471 #ifdef UA_ENABLE_TYPENAMES 14472 .memberName =
"receiveBufferSize",
14474 .namespaceZero =
true,
14479 #ifdef UA_ENABLE_TYPENAMES 14480 .memberName =
"sendBufferSize",
14482 .namespaceZero =
true,
14487 #ifdef UA_ENABLE_TYPENAMES 14488 .memberName =
"maxMessageSize",
14490 .namespaceZero =
true,
14495 #ifdef UA_ENABLE_TYPENAMES 14496 .memberName =
"maxChunkCount",
14498 .namespaceZero =
true,
14503 #ifdef UA_ENABLE_TYPENAMES 14504 .memberName =
"endpointUrl",
14506 .namespaceZero =
true,
14514 #ifdef UA_ENABLE_TYPENAMES 14515 .memberName =
"error",
14517 .namespaceZero =
true,
14522 #ifdef UA_ENABLE_TYPENAMES 14523 .memberName =
"reason",
14525 .namespaceZero =
true,
14533 #ifdef UA_ENABLE_TYPENAMES 14536 .namespaceZero =
true,
14544 #ifdef UA_ENABLE_TYPENAMES 14545 .memberName =
"securityPolicyUri",
14547 .namespaceZero =
true,
14552 #ifdef UA_ENABLE_TYPENAMES 14553 .memberName =
"senderCertificate",
14555 .namespaceZero =
true,
14560 #ifdef UA_ENABLE_TYPENAMES 14561 .memberName =
"receiverCertificateThumbprint",
14563 .namespaceZero =
true,
14571 #ifdef UA_ENABLE_TYPENAMES 14572 .memberName =
"protocolVersion",
14574 .namespaceZero =
true,
14579 #ifdef UA_ENABLE_TYPENAMES 14580 .memberName =
"receiveBufferSize",
14582 .namespaceZero =
true,
14587 #ifdef UA_ENABLE_TYPENAMES 14588 .memberName =
"sendBufferSize",
14590 .namespaceZero =
true,
14595 #ifdef UA_ENABLE_TYPENAMES 14596 .memberName =
"maxMessageSize",
14598 .namespaceZero =
true,
14603 #ifdef UA_ENABLE_TYPENAMES 14604 .memberName =
"maxChunkCount",
14606 .namespaceZero =
true,
14614 #ifdef UA_ENABLE_TYPENAMES 14615 .memberName =
"sequenceNumber",
14617 .namespaceZero =
true,
14622 #ifdef UA_ENABLE_TYPENAMES 14623 .memberName =
"requestId",
14625 .namespaceZero =
true,
14633 #ifdef UA_ENABLE_TYPENAMES 14634 .memberName =
"messageTypeAndChunkType",
14636 .namespaceZero =
true,
14641 #ifdef UA_ENABLE_TYPENAMES 14642 .memberName =
"messageSize",
14644 .namespaceZero =
true,
14652 #ifdef UA_ENABLE_TYPENAMES 14655 .namespaceZero =
true,
14663 #ifdef UA_ENABLE_TYPENAMES 14664 .memberName =
"tokenId",
14666 .namespaceZero =
true,
14674 #ifdef UA_ENABLE_TYPENAMES 14675 .memberName =
"messageHeader",
14677 .namespaceZero =
false,
14682 #ifdef UA_ENABLE_TYPENAMES 14683 .memberName =
"secureChannelId",
14685 .namespaceZero =
true,
14694 #ifdef UA_ENABLE_TYPENAMES 14695 .typeName =
"SecureConversationMessageAbortBody",
14699 .fixedSize =
false,
14700 .overlayable =
false,
14701 .binaryEncodingId = 0,
14703 .members = SecureConversationMessageAbortBody_members },
14706 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14708 #ifdef UA_ENABLE_TYPENAMES 14709 .typeName =
"SecureConversationMessageFooter",
14713 .fixedSize =
false,
14714 .overlayable =
false,
14715 .binaryEncodingId = 0,
14717 .members = SecureConversationMessageFooter_members },
14720 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14722 #ifdef UA_ENABLE_TYPENAMES 14723 .typeName =
"TcpHelloMessage",
14727 .fixedSize =
false,
14728 .overlayable =
false,
14729 .binaryEncodingId = 0,
14731 .members = TcpHelloMessage_members },
14734 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14736 #ifdef UA_ENABLE_TYPENAMES 14737 .typeName =
"TcpErrorMessage",
14741 .fixedSize =
false,
14742 .overlayable =
false,
14743 .binaryEncodingId = 0,
14745 .members = TcpErrorMessage_members },
14748 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14750 #ifdef UA_ENABLE_TYPENAMES 14751 .typeName =
"MessageType",
14757 .binaryEncodingId = 0,
14759 .members = MessageType_members },
14762 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14764 #ifdef UA_ENABLE_TYPENAMES 14765 .typeName =
"AsymmetricAlgorithmSecurityHeader",
14769 .fixedSize =
false,
14770 .overlayable =
false,
14771 .binaryEncodingId = 0,
14773 .members = AsymmetricAlgorithmSecurityHeader_members },
14776 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14778 #ifdef UA_ENABLE_TYPENAMES 14779 .typeName =
"TcpAcknowledgeMessage",
14785 .binaryEncodingId = 0,
14787 .members = TcpAcknowledgeMessage_members },
14790 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14792 #ifdef UA_ENABLE_TYPENAMES 14793 .typeName =
"SequenceHeader",
14799 .binaryEncodingId = 0,
14801 .members = SequenceHeader_members },
14804 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14806 #ifdef UA_ENABLE_TYPENAMES 14807 .typeName =
"TcpMessageHeader",
14813 .binaryEncodingId = 0,
14815 .members = TcpMessageHeader_members },
14818 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14820 #ifdef UA_ENABLE_TYPENAMES 14821 .typeName =
"ChunkType",
14827 .binaryEncodingId = 0,
14829 .members = ChunkType_members },
14832 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14834 #ifdef UA_ENABLE_TYPENAMES 14835 .typeName =
"SymmetricAlgorithmSecurityHeader",
14841 .binaryEncodingId = 0,
14843 .members = SymmetricAlgorithmSecurityHeader_members },
14846 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14848 #ifdef UA_ENABLE_TYPENAMES 14849 .typeName =
"SecureConversationMessageHeader",
14855 .binaryEncodingId = 0,
14857 .members = SecureConversationMessageHeader_members },
14888 message->
data = data;
14889 message->
length = length;
14895 size_t complete_until = 0;
14897 while(message->
length - complete_until >= 8) {
14902 if(msgtype != (
'M' + (
'S' << 8) + (
'G' << 16)) &&
14903 msgtype != (
'E' + (
'R' << 8) + (
'R' << 16)) &&
14904 msgtype != (
'O' + (
'P' << 8) + (
'N' << 16)) &&
14905 msgtype != (
'H' + (
'E' << 8) + (
'L' << 16)) &&
14906 msgtype != (
'A' + (
'C' << 8) + (
'K' << 16)) &&
14907 msgtype != (
'C' + (
'L' << 8) + (
'O' << 16))) {
14908 garbage_end =
true;
14914 size_t length_pos = complete_until + 4;
14915 UA_StatusCode decode_retval = UA_UInt32_decodeBinary(message, &length_pos, &chunk_length);
14919 chunk_length < 16 ||
14921 garbage_end =
true;
14926 if(chunk_length + complete_until > message->
length)
14929 complete_until += chunk_length;
14933 if(complete_until != message->
length) {
14936 if(complete_until == 0)
14938 message->
length = complete_until;
14943 if(complete_until == 0) {
14959 size_t incomplete_length = message->
length - complete_until;
14964 &message->
data[complete_until], incomplete_length);
14965 message->
length = complete_until;
14982 *realloced =
false;
14987 retval = connection->
recv(connection, chunks, timeout);
15009 UA_atomic_cmpxchg((
void**)&channel->
connection, connection,
NULL);
15010 UA_atomic_xchg((
void**)&connection->
channel,
NULL);
15018 UA_atomic_xchg((
void**)&connection->
channel, (
void*)channel);
15023 const char ** port,
const char **path) {
15024 if (!endpointUrl || !hostname)
15027 size_t urlLength = strlen(endpointUrl);
15028 if(urlLength < 10 || urlLength >= 256)
15031 if(strncmp(endpointUrl,
"opc.tcp://", 10) != 0)
15034 if (urlLength == 10) {
15035 hostname[0] =
'\0';
15041 size_t portpos = 10;
15044 UA_Boolean ip6_end_found = endpointUrl[portpos] !=
'[';
15045 for(; portpos < urlLength; ++portpos) {
15046 if (!ip6_end_found) {
15047 if (endpointUrl[portpos] ==
']')
15052 if(endpointUrl[portpos] ==
':' || endpointUrl[portpos] ==
'/')
15056 memcpy(hostname, &endpointUrl[10], portpos - 10);
15057 hostname[portpos-10] = 0;
15060 if (portpos < urlLength - 1) {
15061 if (endpointUrl[portpos] ==
'/')
15064 *port = &endpointUrl[portpos + 1];
15071 size_t pathpos = portpos < urlLength ? portpos : 10;
15072 for(; pathpos < urlLength; ++pathpos) {
15073 if(endpointUrl[pathpos] ==
'/')
15076 if (pathpos < urlLength-1)
15077 *path = &endpointUrl[pathpos+1];
15088 UA_UInt16 * port,
const char ** path) {
15089 const char* portTmp =
NULL;
15090 const char* pathTmp =
NULL;
15094 hostname[0] =
'\0';
15105 portLen = (size_t)(pathTmp-portTmp-1);
15107 portLen = strlen(portTmp);
15112 memcpy(portStr, portTmp, portLen);
15113 portStr[portLen]=
'\0';
15116 for (
size_t i=0; i<6; ++i) {
15117 if (portStr[i] == 0)
15119 if (portStr[i] <
'0' || portStr[i] >
'9')
15142 size_t progress = 0;
15144 while(progress < buflen) {
15146 if(
'0' > c ||
'9' < c)
15162 #define UA_SECURE_MESSAGE_HEADER_LENGTH 24 15174 UA_ByteString_deleteMembers(&channel->
serverNonce);
15176 UA_ByteString_deleteMembers(&channel->
clientNonce);
15177 UA_ChannelSecurityToken_deleteMembers(&channel->
securityToken);
15188 se->session->channel =
NULL;
15196 UA_ByteString_deleteMembers(&ch->bytes);
15207 nonce->
data[0] =
'a';
15211 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15212 #pragma GCC diagnostic push 15213 #pragma GCC diagnostic ignored "-Wextra" 15214 #pragma GCC diagnostic ignored "-Wcast-qual" 15215 #pragma GCC diagnostic ignored "-Wunused-value" 15222 se->session = session;
15223 if(UA_atomic_cmpxchg((
void**)&session->
channel,
NULL, channel) !=
NULL) {
15230 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15231 #pragma GCC diagnostic pop 15239 if(se->session == session)
15256 return se->session;
15306 UA_String_init(&errorMsg);
15308 UA_UInt32_encodeBinary(&ci->
errorCode, dst, &offset);
15309 UA_String_encodeBinary(&errorMsg, dst, &offset);
15320 size_t offset_header = 0;
15321 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, dst, &offset_header);
15322 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symSecHeader, dst, &offset_header);
15323 UA_SequenceHeader_encodeBinary(&seqHeader, dst, &offset_header);
15346 const void *content,
const UA_DataType *contentType) {
15366 size_t messagePos = 0;
15369 UA_NodeId_encodeBinary(&typeId, &message, &messagePos);
15386 &ci, &message, &messagePos);
15393 UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15400 return UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15411 if(ch->requestId == requestId) {
15412 UA_ByteString_deleteMembers(&ch->bytes);
15423 size_t offset,
size_t chunklength) {
15424 UA_Byte* new_bytes =
UA_realloc(ch->bytes.data, ch->bytes.length + chunklength);
15426 UA_ByteString_deleteMembers(&ch->bytes);
15429 ch->bytes.data = new_bytes;
15430 memcpy(&ch->bytes.data[ch->bytes.length], &msg->
data[offset], chunklength);
15431 ch->bytes.length += chunklength;
15437 size_t chunklength) {
15439 if(msg->
length - offset < chunklength) {
15441 UA_SecureChannel_removeChunk(channel, requestId);
15448 if(ch->requestId == requestId)
15457 ch->requestId = requestId;
15458 UA_ByteString_init(&ch->bytes);
15462 appendChunk(ch, msg, offset, chunklength);
15468 size_t chunklength,
UA_Boolean *deleteChunk) {
15469 if(msg->
length - offset < chunklength) {
15471 UA_SecureChannel_removeChunk(channel, requestId);
15477 if(ch->requestId == requestId)
15483 *deleteChunk =
false;
15484 bytes.
length = chunklength;
15487 *deleteChunk =
true;
15488 appendChunk(ch, msg, offset, chunklength);
15516 if (chunks->
length > 3 && chunks->
data[offset] ==
'E' &&
15517 chunks->
data[offset+1] ==
'R' && chunks->
data[offset+2] ==
'R') {
15519 retval = UA_TcpMessageHeader_decodeBinary(chunks, &offset, &header);
15524 retval = UA_TcpErrorMessage_decodeBinary(chunks, &offset, &errorMessage);
15533 size_t initial_offset = offset;
15537 retval = UA_SecureConversationMessageHeader_decodeBinary(chunks, &offset, &header);
15550 UA_SequenceHeader_init(&sequenceHeader);
15555 retval |= UA_UInt32_decodeBinary(chunks, &offset, &tokenId);
15556 retval |= UA_SequenceHeader_decodeBinary(chunks, &offset, &sequenceHeader);
15568 retval = UA_SecureChannel_processSequenceNumber(channel, sequenceHeader.
sequenceNumber);
15574 size_t processed_header = offset - initial_offset;
15577 UA_SecureChannel_appendChunk(channel, sequenceHeader.
requestId, chunks, offset,
15583 UA_SecureChannel_finalizeChunk(channel, sequenceHeader.
requestId, chunks, offset,
15586 if(message.
length > 0) {
15590 UA_ByteString_deleteMembers(&message);
15594 UA_SecureChannel_removeChunk(channel, sequenceHeader.
requestId);
15602 }
while(chunks->
length > offset);
15613 #ifdef UA_ENABLE_SUBSCRIPTIONS 15616 UA_Session adminSession = {
15618 .applicationName = {.locale = {0,
NULL}, .text = {0,
NULL}},
15620 .gatewayServerUri = {0,
NULL}, .discoveryProfileUri = {0,
NULL},
15621 .discoveryUrlsSize = 0, .discoveryUrls =
NULL},
15622 .sessionName = {
sizeof(
"Administrator Session")-1, (
UA_Byte*)
"Administrator Session"},
15624 .identifier.numeric = 1},
15625 .sessionId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
15628 .continuationPoints = {
NULL}};
15642 LIST_INIT(&session->continuationPoints);
15643 #ifdef UA_ENABLE_SUBSCRIPTIONS 15644 LIST_INIT(&session->serverSubscriptions);
15645 session->lastSubscriptionID = 0;
15653 UA_NodeId_deleteMembers(&session->
sessionId);
15658 UA_ByteString_deleteMembers(&cp->identifier);
15659 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
15664 #ifdef UA_ENABLE_SUBSCRIPTIONS 15671 UA_PublishResponseEntry *entry;
15674 UA_PublishResponse_deleteMembers(&entry->response);
15685 #ifdef UA_ENABLE_SUBSCRIPTIONS 15687 void UA_Session_addSubscription(UA_Session *session,
UA_Subscription *newSubscription) {
15688 LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
15692 UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
15694 UA_Subscription *sub = UA_Session_getSubscriptionByID(session, subscriptionID);
15704 UA_Session_getSubscriptionByID(UA_Session *session,
UA_UInt32 subscriptionID) {
15706 LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
15707 if(sub->subscriptionID == subscriptionID)
15713 UA_UInt32 UA_Session_getUniqueSubscriptionID(UA_Session *session) {
15714 return ++(session->lastSubscriptionID);
15726 #ifdef UA_ENABLE_GENERATE_NAMESPACE0 15729 #ifdef UA_ENABLE_SUBSCRIPTIONS 15732 #if defined(UA_ENABLE_MULTITHREADING) && !defined(NDEBUG) 15736 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 15740 static const UA_NodeId nodeIdHasSubType = {
15743 static const UA_NodeId nodeIdHasComponent = {
15746 static const UA_NodeId nodeIdHasProperty = {
15749 static const UA_NodeId nodeIdOrganizes = {
15753 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 15754 static const UA_NodeId nodeIdNonHierarchicalReferences = {
15786 .data = (
UA_Byte*)(uintptr_t)name};
15806 size_t refssize = parent->referencesSize;
15814 for(
size_t i = parent->referencesSize; i > 0; --i) {
15826 addNodeInternal(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15829 UA_AddNodesResult_init(&res);
15832 &referenceTypeId, &UA_NODEID_NULL,
15839 addNodeInternalWithType(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15842 UA_AddNodesResult_init(&res);
15845 &referenceTypeId, &typeIdentifier,
15853 deleteInstanceChildren(UA_Server *server,
UA_NodeId *objectNodeId) {
15856 UA_BrowseDescription_init(&bDes);
15857 bDes.
nodeId = *objectNodeId;
15870 true, rd->
nodeId,
true);
15874 UA_BrowseResult_deleteMembers(&bRes);
15896 #ifdef UA_ENABLE_MULTITHREADING 15897 pthread_cond_destroy(&server->dispatchQueue_condition);
15898 pthread_mutex_destroy(&server->dispatchQueue_mutex);
15904 static void UA_Server_cleanup(UA_Server *server,
void *_) {
15919 UA_Server *server = (UA_Server*)handle;
15925 UA_BuildInfo_copy(&server->config.buildInfo, &retval->
buildInfo);
15933 if(sourceTimeStamp) {
15952 UA_Byte *byte = UA_Byte_new();
15958 if(sourceTimeStamp) {
15983 if(sourceTimeStamp) {
15998 UA_Server *server = (UA_Server*)handle;
16005 if(sourceTimestamp) {
16015 UA_Server *server = (UA_Server*)handle;
16033 if(newNamespacesSize <= server->namespacesSize)
16043 for(
size_t i = server->
namespacesSize; i < newNamespacesSize; ++i)
16062 if(sourceTimeStamp) {
16069 static void copyNames(UA_Node *node,
char *name) {
16070 node->browseName = UA_QUALIFIEDNAME_ALLOC(0, name);
16071 node->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16072 node->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16076 addDataTypeNode(UA_Server *server,
char* name,
UA_UInt32 datatypeid,
16079 copyNames((UA_Node*)datatype, name);
16080 datatype->nodeId.identifier.numeric = datatypeid;
16081 datatype->isAbstract = isAbstract;
16082 addNodeInternal(server, (UA_Node*)datatype,
16083 UA_NODEID_NUMERIC(0, parent), nodeIdHasSubType);
16087 addObjectTypeNode(UA_Server *server,
char* name,
UA_UInt32 objecttypeid,
16090 copyNames((UA_Node*)objecttype, name);
16091 objecttype->nodeId.identifier.numeric = objecttypeid;
16092 addNodeInternal(server, (UA_Node*)objecttype, UA_NODEID_NUMERIC(0, parent),
16093 UA_NODEID_NUMERIC(0, parentreference));
16097 createVariableTypeNode(UA_Server *server,
char* name,
UA_UInt32 variabletypeid,
16100 copyNames((UA_Node*)variabletype, name);
16101 variabletype->nodeId.identifier.numeric = variabletypeid;
16102 variabletype->isAbstract =
abstract;
16103 return variabletype;
16106 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16108 GetMonitoredItems(
void *handle,
const UA_NodeId objectId,
size_t inputSize,
16111 UA_Session* session = methodCallSession;
16112 UA_Subscription* subscription = UA_Session_getSubscriptionByID(session, subscriptionId);
16118 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16121 if(sizeOfOutput==0)
16127 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16128 clientHandles[i] = monitoredItem->clientHandle;
16129 serverHandles[i] = monitoredItem->itemId;
16132 UA_Variant_setArray(&output[0], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16133 UA_Variant_setArray(&output[1], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16139 UA_Server *server =
UA_calloc(1,
sizeof(UA_Server));
16143 server->config = config;
16147 #ifdef UA_ENABLE_MULTITHREADING 16149 cds_wfcq_init(&server->dispatchQueue_head, &server->dispatchQueue_tail);
16150 cds_lfs_init(&server->mainLoopJobs);
16155 #ifndef UA_ENABLE_DETERMINISTIC_RNG 16162 UA_String_copy(&server->config.applicationDescription.applicationUri, &server->
namespaces[1]);
16169 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
16175 UA_STRING_ALLOC(
"http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
16177 size_t policies = 0;
16178 if(server->config.enableAnonymousLogin)
16180 if(server->config.enableUsernamePasswordLogin)
16185 size_t currentIndex = 0;
16186 if(server->config.enableAnonymousLogin) {
16192 if(server->config.enableUsernamePasswordLogin) {
16201 UA_String_copy(&server->config.serverCertificate, &endpoint->
serverCertificate);
16202 UA_ApplicationDescription_copy(&server->config.applicationDescription, &endpoint->
server);
16211 UA_Job cleanup = {.
type = UA_JOBTYPE_METHODCALL,
16217 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 16224 copyNames((UA_Node*)references,
"References");
16226 references->isAbstract =
true;
16227 references->symmetric =
true;
16228 references->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"References");
16231 copyNames((UA_Node*)hassubtype,
"HasSubtype");
16232 hassubtype->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HasSupertype");
16234 hassubtype->isAbstract =
false;
16235 hassubtype->symmetric =
false;
16243 copyNames((UA_Node*)hierarchicalreferences,
"HierarchicalReferences");
16245 hierarchicalreferences->isAbstract =
true;
16246 hierarchicalreferences->symmetric =
false;
16247 addNodeInternal(server, (UA_Node*)hierarchicalreferences,
16251 copyNames((UA_Node*)nonhierarchicalreferences,
"NonHierarchicalReferences");
16253 nonhierarchicalreferences->isAbstract =
true;
16254 nonhierarchicalreferences->symmetric =
false;
16255 addNodeInternal(server, (UA_Node*)nonhierarchicalreferences,
16259 copyNames((UA_Node*)haschild,
"HasChild");
16261 haschild->isAbstract =
false;
16262 haschild->symmetric =
false;
16263 addNodeInternal(server, (UA_Node*)haschild,
16267 copyNames((UA_Node*)organizes,
"Organizes");
16268 organizes->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrganizedBy");
16270 organizes->isAbstract =
false;
16271 organizes->symmetric =
false;
16272 addNodeInternal(server, (UA_Node*)organizes,
16276 copyNames((UA_Node*)haseventsource,
"HasEventSource");
16277 haseventsource->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EventSourceOf");
16279 haseventsource->isAbstract =
false;
16280 haseventsource->symmetric =
false;
16281 addNodeInternal(server, (UA_Node*)haseventsource,
16285 copyNames((UA_Node*)hasmodellingrule,
"HasModellingRule");
16286 hasmodellingrule->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModellingRuleOf");
16288 hasmodellingrule->isAbstract =
false;
16289 hasmodellingrule->symmetric =
false;
16290 addNodeInternal(server, (UA_Node*)hasmodellingrule, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16293 copyNames((UA_Node*)hasencoding,
"HasEncoding");
16294 hasencoding->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EncodingOf");
16296 hasencoding->isAbstract =
false;
16297 hasencoding->symmetric =
false;
16298 addNodeInternal(server, (UA_Node*)hasencoding, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16301 copyNames((UA_Node*)hasdescription,
"HasDescription");
16302 hasdescription->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"DescriptionOf");
16304 hasdescription->isAbstract =
false;
16305 hasdescription->symmetric =
false;
16306 addNodeInternal(server, (UA_Node*)hasdescription, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16309 copyNames((UA_Node*)hastypedefinition,
"HasTypeDefinition");
16310 hastypedefinition->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"TypeDefinitionOf");
16312 hastypedefinition->isAbstract =
false;
16313 hastypedefinition->symmetric =
false;
16314 addNodeInternal(server, (UA_Node*)hastypedefinition, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16317 copyNames((UA_Node*)generatesevent,
"GeneratesEvent");
16318 generatesevent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"GeneratedBy");
16320 generatesevent->isAbstract =
false;
16321 generatesevent->symmetric =
false;
16322 addNodeInternal(server, (UA_Node*)generatesevent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16325 copyNames((UA_Node*)aggregates,
"Aggregates");
16326 aggregates->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"AggregatedBy");
16328 aggregates->isAbstract =
false;
16329 aggregates->symmetric =
false;
16330 addNodeInternal(server, (UA_Node*)aggregates, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCHILD), nodeIdHasSubType);
16337 copyNames((UA_Node*)hasproperty,
"HasProperty");
16338 hasproperty->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"PropertyOf");
16340 hasproperty->isAbstract =
false;
16341 hasproperty->symmetric =
false;
16342 addNodeInternal(server, (UA_Node*)hasproperty,
16346 copyNames((UA_Node*)hascomponent,
"HasComponent");
16347 hascomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ComponentOf");
16349 hascomponent->isAbstract =
false;
16350 hascomponent->symmetric =
false;
16351 addNodeInternal(server, (UA_Node*)hascomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16354 copyNames((UA_Node*)hasnotifier,
"HasNotifier");
16355 hasnotifier->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"NotifierOf");
16357 hasnotifier->isAbstract =
false;
16358 hasnotifier->symmetric =
false;
16359 addNodeInternal(server, (UA_Node*)hasnotifier, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASEVENTSOURCE), nodeIdHasSubType);
16362 copyNames((UA_Node*)hasorderedcomponent,
"HasOrderedComponent");
16363 hasorderedcomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrderedComponentOf");
16365 hasorderedcomponent->isAbstract =
false;
16366 hasorderedcomponent->symmetric =
false;
16367 addNodeInternal(server, (UA_Node*)hasorderedcomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCOMPONENT), nodeIdHasSubType);
16370 copyNames((UA_Node*)hasmodelparent,
"HasModelParent");
16371 hasmodelparent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModelParentOf");
16373 hasmodelparent->isAbstract =
false;
16374 hasmodelparent->symmetric =
false;
16375 addNodeInternal(server, (UA_Node*)hasmodelparent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16378 copyNames((UA_Node*)fromstate,
"FromState");
16379 fromstate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ToTransition");
16381 fromstate->isAbstract =
false;
16382 fromstate->symmetric =
false;
16383 addNodeInternal(server, (UA_Node*)fromstate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16386 copyNames((UA_Node*)tostate,
"ToState");
16387 tostate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"FromTransition");
16389 tostate->isAbstract =
false;
16390 tostate->symmetric =
false;
16391 addNodeInternal(server, (UA_Node*)tostate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16394 copyNames((UA_Node*)hascause,
"HasCause");
16395 hascause->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeCausedBy");
16397 hascause->isAbstract =
false;
16398 hascause->symmetric =
false;
16399 addNodeInternal(server, (UA_Node*)hascause, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16402 copyNames((UA_Node*)haseffect,
"HasEffect");
16403 haseffect->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeEffectedBy");
16405 haseffect->isAbstract =
false;
16406 haseffect->symmetric =
false;
16407 addNodeInternal(server, (UA_Node*)haseffect, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16410 copyNames((UA_Node*)hashistoricalconfiguration,
"HasHistoricalConfiguration");
16411 hashistoricalconfiguration->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HistoricalConfigurationOf");
16413 hashistoricalconfiguration->isAbstract =
false;
16414 hashistoricalconfiguration->symmetric =
false;
16415 addNodeInternal(server, (UA_Node*)hashistoricalconfiguration, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16422 copyNames((UA_Node*)basedatatype,
"BaseDataType");
16424 basedatatype->isAbstract =
true;
16467 basevartype->valueRank = -2;
16475 basedatavartype->valueRank = -2;
16477 addNodeInternalWithType(server, (UA_Node*)basedatavartype,
16483 propertytype->valueRank = -2;
16485 addNodeInternalWithType(server, (UA_Node*)propertytype,
16491 buildinfotype->valueRank = -1;
16493 addNodeInternalWithType(server, (UA_Node*)buildinfotype,
16499 serverstatustype->valueRank = -1;
16501 addNodeInternalWithType(server, (UA_Node*)serverstatustype,
16510 copyNames((UA_Node*)baseobjtype,
"BaseObjectType");
16531 static const UA_NodeId nodeIdFolderType = {
16534 static const UA_NodeId nodeIdHasTypeDefinition = {
16539 copyNames((UA_Node*)root,
"Root");
16548 copyNames((UA_Node*)objects,
"Objects");
16550 addNodeInternalWithType(server, (UA_Node*)objects, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16551 nodeIdOrganizes, nodeIdFolderType);
16554 copyNames((UA_Node*)types,
"Types");
16556 addNodeInternalWithType(server, (UA_Node*)types, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16557 nodeIdOrganizes, nodeIdFolderType);
16560 copyNames((UA_Node*)referencetypes,
"ReferenceTypes");
16562 addNodeInternalWithType(server, (UA_Node*)referencetypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16563 nodeIdOrganizes, nodeIdFolderType);
16568 copyNames((UA_Node*)datatypes,
"DataTypes");
16570 addNodeInternalWithType(server, (UA_Node*)datatypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16571 nodeIdOrganizes, nodeIdFolderType);
16576 copyNames((UA_Node*)variabletypes,
"VariableTypes");
16578 addNodeInternalWithType(server, (UA_Node*)variabletypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16579 nodeIdOrganizes, nodeIdFolderType);
16584 copyNames((UA_Node*)objecttypes,
"ObjectTypes");
16586 addNodeInternalWithType(server, (UA_Node*)objecttypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16587 nodeIdOrganizes, nodeIdFolderType);
16592 copyNames((UA_Node*)eventtypes,
"EventTypes");
16594 addNodeInternalWithType(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16595 nodeIdOrganizes, nodeIdFolderType);
16598 copyNames((UA_Node*)views,
"Views");
16600 addNodeInternalWithType(server, (UA_Node*)views, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16601 nodeIdOrganizes, nodeIdFolderType);
16608 copyNames((UA_Node*)mandatory,
"Mandatory");
16610 addNodeInternalWithType(server, (UA_Node*)mandatory, UA_NODEID_NULL,
16614 copyNames((UA_Node*)optional,
"Optional");
16616 addNodeInternalWithType(server, (UA_Node*)optional, UA_NODEID_NULL,
16621 ua_namespaceinit_generated(server);
16630 copyNames((UA_Node*)servernode,
"Server");
16639 deleteInstanceChildren(server, &serverNodeId);
16642 copyNames((UA_Node*)namespaceArray,
"NamespaceArray");
16645 namespaceArray->value.dataSource = (UA_DataSource) {.handle = server, .read = readNamespaces,
16646 .write = writeNamespaces};
16648 namespaceArray->valueRank = 1;
16649 namespaceArray->minimumSamplingInterval = 1.0;
16650 addNodeInternalWithType(server, (UA_Node*)namespaceArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16654 copyNames((UA_Node*)serverArray,
"ServerArray");
16657 &server->config.applicationDescription.applicationUri, 1,
16658 &UA_TYPES[UA_TYPES_STRING]);
16659 serverArray->value.data.value.hasValue =
true;
16660 serverArray->valueRank = 1;
16661 serverArray->minimumSamplingInterval = 1.0;
16662 addNodeInternalWithType(server, (UA_Node*)serverArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16666 copyNames((UA_Node*)servercapablities,
"ServerCapabilities");
16668 addNodeInternalWithType(server, (UA_Node*)servercapablities, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16669 nodeIdHasComponent,
16672 deleteInstanceChildren(server, &ServerCapabilitiesNodeId);
16675 copyNames((UA_Node*)localeIdArray,
"LocaleIdArray");
16679 &enLocale, 1, &UA_TYPES[UA_TYPES_STRING]);
16680 localeIdArray->value.data.value.hasValue =
true;
16681 localeIdArray->valueRank = 1;
16682 localeIdArray->minimumSamplingInterval = 1.0;
16683 addNodeInternalWithType(server, (UA_Node*)localeIdArray,
16687 UA_VariableNode *maxBrowseContinuationPoints = UA_NodeStore_newVariableNode();
16688 copyNames((UA_Node*)maxBrowseContinuationPoints,
"MaxBrowseContinuationPoints");
16689 maxBrowseContinuationPoints->nodeId.identifier.numeric =
16693 maxBrowseContinuationPoints->value.data.value.hasValue =
true;
16694 addNodeInternalWithType(server, (UA_Node*)maxBrowseContinuationPoints,
16699 #define MAX_PROFILEARRAY 16 //a *magic* limit to the number of supported profiles 16700 #define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING_ALLOC(x) 16703 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NanoEmbeddedDevice");
16705 #ifdef UA_ENABLE_SERVICESET_NODEMANAGEMENT 16706 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NodeManagement");
16708 #ifdef UA_ENABLE_SERVICESET_METHOD 16709 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/Methods");
16711 #ifdef UA_ENABLE_SUBSCRIPTIONS 16712 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/EmbeddedDataChangeSubscription");
16715 UA_VariableNode *serverProfileArray = UA_NodeStore_newVariableNode();
16716 copyNames((UA_Node*)serverProfileArray,
"ServerProfileArray");
16719 UA_Array_new(profileArraySize, &UA_TYPES[UA_TYPES_STRING]),
16720 profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
16721 for(
UA_UInt16 i=0;i<profileArraySize;++i)
16722 ((
UA_String *)serverProfileArray->value.data.value.value.data)[i] = profileArray[i];
16723 serverProfileArray->value.data.value.hasValue =
true;
16724 serverProfileArray->valueRank = 1;
16725 serverProfileArray->minimumSamplingInterval = 1.0;
16726 addNodeInternalWithType(server, (UA_Node*)serverProfileArray,
16730 UA_VariableNode *softwareCertificates = UA_NodeStore_newVariableNode();
16731 copyNames((UA_Node*)softwareCertificates,
"SoftwareCertificates");
16734 addNodeInternalWithType(server, (UA_Node*)softwareCertificates,
16738 UA_VariableNode *maxQueryContinuationPoints = UA_NodeStore_newVariableNode();
16739 copyNames((UA_Node*)maxQueryContinuationPoints,
"MaxQueryContinuationPoints");
16742 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16743 maxQueryContinuationPoints->value.data.value.hasValue =
true;
16744 addNodeInternalWithType(server, (UA_Node*)maxQueryContinuationPoints,
16748 UA_VariableNode *maxHistoryContinuationPoints = UA_NodeStore_newVariableNode();
16749 copyNames((UA_Node*)maxHistoryContinuationPoints,
"MaxHistoryContinuationPoints");
16752 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16753 maxHistoryContinuationPoints->value.data.value.hasValue =
true;
16754 addNodeInternalWithType(server, (UA_Node*)maxHistoryContinuationPoints,
16758 UA_VariableNode *minSupportedSampleRate = UA_NodeStore_newVariableNode();
16759 copyNames((UA_Node*)minSupportedSampleRate,
"MinSupportedSampleRate");
16763 minSupportedSampleRate->value.data.value.hasValue =
true;
16764 addNodeInternalWithType(server, (UA_Node*)minSupportedSampleRate,
16769 copyNames((UA_Node*)modellingRules,
"ModellingRules");
16771 addNodeInternalWithType(server, (UA_Node*)modellingRules,
16776 copyNames((UA_Node*)aggregateFunctions,
"AggregateFunctions");
16778 addNodeInternalWithType(server, (UA_Node*)aggregateFunctions,
16783 copyNames((UA_Node*)serverdiagnostics,
"ServerDiagnostics");
16785 addNodeInternalWithType(server, (UA_Node*)serverdiagnostics,
16789 deleteInstanceChildren(server, &ServerDiagnosticsNodeId);
16792 copyNames((UA_Node*)enabledFlag,
"EnabledFlag");
16796 enabledFlag->value.data.value.hasValue =
true;
16797 enabledFlag->valueRank = 1;
16798 enabledFlag->minimumSamplingInterval = 1.0;
16799 addNodeInternalWithType(server, (UA_Node*)enabledFlag,
16804 copyNames((UA_Node*)serverstatus,
"ServerStatus");
16807 serverstatus->value.dataSource = (UA_DataSource) {.handle = server, .read = readStatus,
16809 addNodeInternalWithType(server, (UA_Node*)serverstatus, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16813 copyNames((UA_Node*)starttime,
"StartTime");
16817 starttime->value.data.value.hasValue =
true;
16818 addNodeInternalWithType(server, (UA_Node*)starttime,
16823 copyNames((UA_Node*)currenttime,
"CurrentTime");
16826 currenttime->value.dataSource = (UA_DataSource) {.handle =
NULL, .read = readCurrentTime,
16828 addNodeInternalWithType(server, (UA_Node*)currenttime,
16833 copyNames((UA_Node*)state,
"State");
16837 state->value.data.value.hasValue =
true;
16838 state->minimumSamplingInterval = 500.0f;
16843 copyNames((UA_Node*)buildinfo,
"BuildInfo");
16847 buildinfo->value.data.value.hasValue =
true;
16848 addNodeInternalWithType(server, (UA_Node*)buildinfo,
16853 copyNames((UA_Node*)producturi,
"ProductUri");
16856 &UA_TYPES[UA_TYPES_STRING]);
16857 producturi->value.data.value.hasValue =
true;
16858 addNodeInternalWithType(server, (UA_Node*)producturi,
16863 copyNames((UA_Node*)manufacturername,
"ManufacturerName");
16866 &server->config.buildInfo.manufacturerName,
16867 &UA_TYPES[UA_TYPES_STRING]);
16868 manufacturername->value.data.value.hasValue =
true;
16869 addNodeInternalWithType(server, (UA_Node*)manufacturername,
16874 copyNames((UA_Node*)productname,
"ProductName");
16877 &UA_TYPES[UA_TYPES_STRING]);
16878 productname->value.data.value.hasValue =
true;
16879 addNodeInternalWithType(server, (UA_Node*)productname,
16884 copyNames((UA_Node*)softwareversion,
"SoftwareVersion");
16887 &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
16888 softwareversion->value.data.value.hasValue =
true;
16889 addNodeInternalWithType(server, (UA_Node*)softwareversion,
16894 copyNames((UA_Node*)buildnumber,
"BuildNumber");
16897 &UA_TYPES[UA_TYPES_STRING]);
16898 buildnumber->value.data.value.hasValue =
true;
16899 addNodeInternalWithType(server, (UA_Node*)buildnumber,
16904 copyNames((UA_Node*)builddate,
"BuildDate");
16907 &UA_TYPES[UA_TYPES_DATETIME]);
16908 builddate->value.data.value.hasValue =
true;
16909 addNodeInternalWithType(server, (UA_Node*)builddate,
16913 UA_VariableNode *secondstillshutdown = UA_NodeStore_newVariableNode();
16914 copyNames((UA_Node*)secondstillshutdown,
"SecondsTillShutdown");
16918 secondstillshutdown->value.data.value.hasValue =
true;
16919 addNodeInternalWithType(server, (UA_Node*)secondstillshutdown,
16924 copyNames((UA_Node*)shutdownreason,
"ShutdownReason");
16928 shutdownreason->value.data.value.hasValue =
true;
16929 addNodeInternalWithType(server, (UA_Node*)shutdownreason,
16934 copyNames((UA_Node*)servicelevel,
"ServiceLevel");
16937 servicelevel->value.dataSource = (UA_DataSource) {.handle = server, .read = readServiceLevel,
16939 addNodeInternalWithType(server, (UA_Node*)servicelevel,
16944 copyNames((UA_Node*)auditing,
"Auditing");
16947 auditing->value.dataSource = (UA_DataSource) {.handle = server, .read = readAuditing, .write =
NULL};
16948 addNodeInternalWithType(server, (UA_Node*)auditing,
16953 copyNames((UA_Node*)vendorServerInfo,
"VendorServerInfo");
16955 addNodeInternalWithType(server, (UA_Node*)vendorServerInfo,
16965 copyNames((UA_Node*)serverRedundancy,
"ServerRedundancy");
16967 addNodeInternalWithType(server, (UA_Node*)serverRedundancy,
16976 copyNames((UA_Node*)redundancySupport,
"RedundancySupport");
16978 redundancySupport->valueRank = -1;
16983 redundancySupport->value.data.value.hasValue =
true;
16984 addNodeInternalWithType(server, (UA_Node*)redundancySupport,
16988 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16990 UA_Argument_init(&inputArguments);
16992 inputArguments.
name = UA_STRING(
"SubscriptionId");
16996 UA_Argument_init(&outputArguments[0]);
16998 outputArguments[0].
name = UA_STRING(
"ServerHandles");
17001 UA_Argument_init(&outputArguments[1]);
17003 outputArguments[1].
name = UA_STRING(
"ClientHandles");
17007 UA_MethodAttributes_init(&addmethodattributes);
17008 addmethodattributes.
displayName = UA_LOCALIZEDTEXT(
"",
"GetMonitoredItems");
17015 UA_QUALIFIEDNAME(0,
"GetMonitoredItems"), addmethodattributes,
17018 1, &inputArguments, 2, outputArguments,
NULL);
17040 UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
17044 UA_init(response, responseType);
17050 UA_RequestHeader_deleteMembers(&requestHeader);
17051 UA_ResponseHeader_deleteMembers(responseHeader);
17058 switch(requestTypeId) {
17063 *requiresSession =
false;
17069 *requiresSession =
false;
17075 *requiresSession =
false;
17123 #ifdef UA_ENABLE_SUBSCRIPTIONS 17175 #ifdef UA_ENABLE_METHODCALLS 17183 #ifdef UA_ENABLE_NODEMANAGEMENT 17218 if(UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage) !=
UA_STATUSCODE_GOOD) {
17219 connection->
close(connection);
17234 UA_TcpHelloMessage_deleteMembers(&helloMessage);
17250 UA_ByteString_init(&ack_msg);
17258 UA_TcpMessageHeader_encodeBinary(&ackHeader, &ack_msg, &tmpPos);
17259 UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &ack_msg, &tmpPos);
17261 connection->
send(connection, &ack_msg);
17273 if(!connection->
channel && channelId != 0)
17285 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(msg, &offset, &asymHeader);
17286 retval |= UA_SequenceHeader_decodeBinary(msg, &offset, &seqHeader);
17287 retval |= UA_NodeId_decodeBinary(msg, &offset, &requestType);
17288 retval |= UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &r);
17292 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17293 UA_NodeId_deleteMembers(&requestType);
17294 UA_OpenSecureChannelRequest_deleteMembers(&r);
17295 connection->
close(connection);
17301 UA_OpenSecureChannelResponse_init(&p);
17303 UA_OpenSecureChannelRequest_deleteMembers(&r);
17308 UA_OpenSecureChannelResponse_deleteMembers(&p);
17309 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17310 connection->
close(connection);
17319 UA_ByteString_init(&resp_msg);
17322 UA_OpenSecureChannelResponse_deleteMembers(&p);
17323 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17324 connection->
close(connection);
17329 size_t tmpPos = 12;
17331 retval |= UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &resp_msg, &tmpPos);
17332 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &resp_msg, &tmpPos);
17334 retval |= UA_NodeId_encodeBinary(&responseType, &resp_msg, &tmpPos);
17335 retval |= UA_OpenSecureChannelResponse_encodeBinary(&p, &resp_msg, &tmpPos);
17339 UA_OpenSecureChannelResponse_deleteMembers(&p);
17340 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17341 connection->
close(connection);
17351 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, &resp_msg, &tmpPos);
17353 connection->
send(connection, &resp_msg);
17356 UA_OpenSecureChannelResponse_deleteMembers(&p);
17357 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17365 size_t *offset = &ppos;
17369 UA_StatusCode retval = UA_NodeId_decodeBinary(msg, offset, &requestTypeId);
17373 UA_NodeId_deleteMembers(&requestTypeId);
17376 size_t requestPos = *offset;
17384 &responseType, &service, &sessionRequired);
17388 "Client requested a subscription, " \
17389 "but those are not enabled in the build");
17392 "Unknown request with type identifier %i",
17401 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 17403 sessionRequired =
false;
17412 "Could not decode the request");
17413 sendError(channel, msg, requestPos, responseType, requestId, retval);
17419 UA_init(response, responseType);
17420 UA_Session *session =
NULL;
17425 goto send_response;
17437 "Trying to activate a session that is " \
17438 "not known in the server");
17439 sendError(channel, msg, requestPos, responseType,
17445 goto send_response;
17449 UA_Session anonymousSession;
17451 if(sessionRequired) {
17453 "Service request %i without a valid session",
17455 sendError(channel, msg, requestPos, responseType,
17461 anonymousSession.
sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
17462 anonymousSession.
channel = channel;
17463 session = &anonymousSession;
17467 if(sessionRequired && !session->
activated) {
17469 "Calling service %i on a non-activated session",
17471 sendError(channel, msg, requestPos, responseType,
17480 if(session->
channel != channel) {
17482 "Client tries to use an obsolete securechannel");
17483 sendError(channel, msg, requestPos, responseType,
17492 #ifdef UA_ENABLE_SUBSCRIPTIONS 17503 service(server, session, request, response);
17513 "Could not send the message over the SecureChannel " 17514 "with StatusCode %s", UA_StatusCode_name(retval));
17524 if (UA_TcpErrorMessage_decodeBinary(msg, offset, &errorMessage) !=
UA_STATUSCODE_GOOD) {
17525 connection->
close(connection);
17530 "Client replied with an error message: %s %.*s",
17538 UA_Server_processSecureChannelMessage(UA_Server *server,
UA_SecureChannel *channel,
17543 switch(messagetype) {
17547 "Client replied with an error message: %s %.*s",
17553 "Cannot process a HEL on an open channel");
17557 "Process an OPN on an open channel");
17563 processMSG(server, channel, requestId, message);
17572 "Unknown message type");
17588 "resulted in error code %s", UA_StatusCode_name(retval));
17593 UA_StatusCode retval = UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
17595 connection->
close(connection);
17603 "Connection %i | Process ERR message", connection->
sockfd);
17604 processERR(server, connection, message, &offset);
17608 "Connection %i | Process HEL message", connection->
sockfd);
17609 processHEL(connection, message, &offset);
17613 "Connection %i | Process OPN message", connection->
sockfd);
17615 retval = UA_UInt32_decodeBinary(message, &offset, &channelId);
17617 connection->
close(connection);
17620 processOPN(server, connection, channelId, &offsetMessage);
17624 "Connection %i | Processing a MSG message not possible " 17625 "without a SecureChannel", connection->
sockfd);
17626 connection->
close(connection);
17630 "Connection %i | Processing a CLO message not possible " 17631 "without a SecureChannel", connection->
sockfd);
17632 connection->
close(connection);
17636 "Connection %i | Unknown message type", connection->
sockfd);
17637 connection->
close(connection);
17658 if(buflen <= progress + 1 || buf[progress] !=
':') {
17664 size_t progress2 =
UA_readNumber(&buf[progress], buflen - progress, &dim->
max);
17669 if(dim->
min >= dim->
max)
17672 return progress + progress2;
17678 size_t dimensionsMax = 0;
17684 if(idx >= dimensionsMax) {
17692 dimensions = newds;
17693 dimensionsMax = dimensionsMax + 2;
17697 size_t progress = readDimension(&str->
data[offset], str->
length - offset,
17699 if(progress == 0) {
17703 offset += progress;
17707 if(offset >= str->
length)
17710 if(str->
data[offset] !=
',') {
17732 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize) {
17733 size_t results_size = 20;
17738 UA_StatusCode retval = UA_NodeId_copy(&rootRef->nodeId, &results[0]);
17744 const UA_Node *node = rootRef;
17749 for(
size_t i = 0; i < node->referencesSize; ++i) {
17751 if(node->references[i].isInverse != inverse ||
17752 !
UA_NodeId_equal(&hasSubtypeNodeId, &node->references[i].referenceTypeId))
17757 for(
size_t j = 0; j <= last; ++j) {
17758 if(
UA_NodeId_equal(&node->references[i].targetId.nodeId, &results[j])) {
17767 if(last + 1 >= results_size) {
17774 results = new_results;
17779 retval = UA_NodeId_copy(&node->references[i].targetId.nodeId, &results[++last]);
17790 if(!node || node->nodeClass != rootRef->nodeClass)
17799 *typeHierarchy = results;
17800 *typeHierarchySize = last + 1;
17806 const UA_NodeId *referenceTypeIds,
size_t referenceTypeIdsSize) {
17815 for(
size_t i = 0; i < node->referencesSize; ++i) {
17816 if(!node->references[i].isInverse)
17820 for(
size_t j = 0; j < referenceTypeIdsSize; ++j) {
17821 if(
UA_NodeId_equal(&node->references[i].referenceTypeId, &referenceTypeIds[j]) &&
17822 isNodeInTree(ns, &node->references[i].targetId.nodeId, nodeToFind,
17823 referenceTypeIds, referenceTypeIdsSize))
17851 for(
size_t i = 0; i < node->referencesSize; ++i) {
17852 if(node->references[i].isInverse == inverse &&
17854 parentId = &node->references[i].targetId.nodeId;
17866 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17874 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17884 for(
size_t i = 0; i < node->referencesSize; ++i) {
17885 if(node->references[i].isInverse ==
false &&
17888 if(node->references[i].isInverse ==
true &&
17889 UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
17900 const void *data) {
17901 #ifndef UA_ENABLE_MULTITHREADING 17905 UA_Node *editNode = (UA_Node*)(uintptr_t)node;
17906 return callback(server, session, editNode, data);
17913 retval = callback(server, session, copy, data);
17966 #define MAXTIMEOUT 50 // max timeout in millisec until the next main loop iteration 17969 processJob(UA_Server *server,
UA_Job *job) {
17972 switch(job->
type) {
17973 case UA_JOBTYPE_NOTHING:
17975 case UA_JOBTYPE_DETACHCONNECTION:
17978 case UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER:
17984 case UA_JOBTYPE_BINARYMESSAGE_ALLOCATED:
17989 case UA_JOBTYPE_METHODCALL:
17990 case UA_JOBTYPE_METHODCALL_DELAYED:
17995 "Trying to execute a job of unknown type");
18005 #ifdef UA_ENABLE_MULTITHREADING 18007 struct MainLoopJob {
18008 struct cds_lfs_node node;
18012 struct DispatchJob {
18013 struct cds_wfcq_node node;
18018 workerLoop(UA_Worker *worker) {
18019 UA_Server *server = worker->server;
18021 volatile UA_Boolean *running = &worker->running;
18025 rcu_register_thread();
18028 struct DispatchJob *dj = (
struct DispatchJob*)
18029 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18031 processJob(server, &dj->job);
18035 pthread_mutex_lock(&server->dispatchQueue_mutex);
18036 pthread_cond_wait(&server->dispatchQueue_condition, &server->dispatchQueue_mutex);
18037 pthread_mutex_unlock(&server->dispatchQueue_mutex);
18039 UA_atomic_add(counter, 1);
18044 rcu_unregister_thread();
18050 dispatchJob(UA_Server *server,
const UA_Job *job) {
18051 struct DispatchJob *dj =
UA_malloc(
sizeof(
struct DispatchJob));
18053 cds_wfcq_node_init(&dj->node);
18054 cds_wfcq_enqueue(&server->dispatchQueue_head, &server->dispatchQueue_tail, &dj->node);
18058 emptyDispatchQueue(UA_Server *server) {
18059 while(!cds_wfcq_empty(&server->dispatchQueue_head, &server->dispatchQueue_tail)) {
18060 struct DispatchJob *dj = (
struct DispatchJob*)
18061 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18062 processJob(server, &dj->job);
18097 if(tmpRj->nextTime >= nextTime_max)
18099 if(tmpRj->interval == rj->interval &&
18101 nextTime_max = tmpRj->nextTime;
18106 rj->nextTime = nextTime_max;
18128 rj->interval = interval_dt;
18132 #ifdef UA_ENABLE_MULTITHREADING 18134 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18140 .type = UA_JOBTYPE_METHODCALL,
18141 .job.methodCall = {.data = rj, .method = (void (*)(UA_Server*,
void*))addRepeatedJob}};
18142 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18145 addRepeatedJob(server, rj);
18160 tmp_last.nextTime = current-1;
18166 if(rj->nextTime > current)
18170 #ifdef UA_ENABLE_MULTITHREADING 18171 dispatchJob(server, &rj->job);
18172 *dispatched =
true;
18174 struct RepeatedJob **previousNext = rj->next.le_prev;
18175 processJob(server, &rj->job);
18179 if((
void*)*previousNext != (
void*)rj) {
18181 "The current repeated job removed itself");
18192 rj->nextTime += (
UA_Int64)rj->interval;
18196 if(rj->nextTime < current)
18197 rj->nextTime = current + 1;
18201 if(last_dispatched->nextTime == rj->nextTime) {
18204 UA_assert(last_dispatched != &tmp_last);
18205 prev_rj = last_dispatched;
18208 prev_rj =
LIST_FIRST(&server->repeatedJobs);
18211 if(!n || n->nextTime >= rj->nextTime)
18218 if(prev_rj != rj) {
18224 last_dispatched = rj;
18230 if(first && first->nextTime < next)
18231 next = first->nextTime;
18237 removeRepeatedJob(UA_Server *server,
UA_Guid *jobId) {
18246 #ifdef UA_ENABLE_MULTITHREADING 18252 #ifdef UA_ENABLE_MULTITHREADING 18258 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18260 .type = UA_JOBTYPE_METHODCALL,
18261 .job.methodCall = {.data = idptr, .method = (void (*)(UA_Server*,
void*))removeRepeatedJob}};
18262 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18264 removeRepeatedJob(server, &jobId);
18282 delayed_free(UA_Server *server,
void *data) {
18290 #ifndef UA_ENABLE_MULTITHREADING 18302 dj->job.type = UA_JOBTYPE_METHODCALL;
18303 dj->job.job.methodCall.data = data;
18304 dj->job.job.methodCall.method = callback;
18310 processDelayedCallbacks(UA_Server *server) {
18314 processJob(server, &dj->job);
18321 #define DELAYEDJOBSSIZE 100 // Collect delayed jobs until we have DELAYEDWORKSIZE items 18323 struct DelayedJobs {
18324 struct DelayedJobs *next;
18327 UA_Job jobs[DELAYEDJOBSSIZE];
18331 static void getCounters(UA_Server *server,
struct DelayedJobs *delayed) {
18333 for(
UA_UInt16 i = 0; i < server->config.nThreads; ++i)
18334 counters[i] = server->workers[i].counter;
18335 delayed->workerCounters = counters;
18342 addDelayedJob(UA_Server *server,
UA_Job *job) {
18343 struct DelayedJobs *dj = server->delayedJobs;
18344 if(!dj || dj->jobsCount >= DELAYEDJOBSSIZE) {
18346 dj =
UA_malloc(
sizeof(
struct DelayedJobs));
18349 "Not enough memory to add a delayed job");
18353 dj->workerCounters =
NULL;
18354 dj->next = server->delayedJobs;
18355 server->delayedJobs = dj;
18361 {.method = (void (*)(UA_Server*,
void*))getCounters, .data = dj->next}};
18362 dispatchJob(server, &setCounter);
18365 dj->jobs[dj->jobsCount] = *job;
18370 addDelayedJobAsync(UA_Server *server,
UA_Job *job) {
18371 addDelayedJob(server, job);
18380 j->
type = UA_JOBTYPE_METHODCALL;
18383 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18384 mlw->job = (
UA_Job) {.type = UA_JOBTYPE_METHODCALL, .job.methodCall =
18386 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18392 dispatchDelayedJobs(UA_Server *server,
void *_) {
18394 struct DelayedJobs *dw = server->delayedJobs, *beforedw = dw;
18400 if(!dw->workerCounters) {
18406 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18407 if(dw->workerCounters[i] == server->workers[i].counter) {
18420 for(
size_t i = 0; i < dw->jobsCount; ++i)
18421 processJob(server, &dw->jobs[i]);
18422 struct DelayedJobs *next = UA_atomic_xchg((
void**)&beforedw->next,
NULL);
18435 #ifdef UA_ENABLE_MULTITHREADING 18436 static void processMainLoopJobs(UA_Server *server) {
18438 struct cds_lfs_head *head = __cds_lfs_pop_all(&server->mainLoopJobs);
18441 struct MainLoopJob *mlw = (
struct MainLoopJob*)&head->node;
18442 struct MainLoopJob *next;
18444 processJob(server, &mlw->job);
18445 next = (
struct MainLoopJob*)mlw->node.next;
18448 }
while((mlw = next));
18453 #ifdef UA_ENABLE_MULTITHREADING 18456 "Spinning up %u worker thread(s)", server->config.nThreads);
18457 pthread_cond_init(&server->dispatchQueue_condition, 0);
18458 pthread_mutex_init(&server->dispatchQueue_mutex, 0);
18459 server->workers =
UA_malloc(server->config.nThreads *
sizeof(UA_Worker));
18460 if(!server->workers)
18462 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18463 UA_Worker *worker = &server->workers[i];
18464 worker->server = server;
18465 worker->counter = 0;
18466 worker->running =
true;
18467 pthread_create(&worker->thr,
NULL, (
void* (*)(
void*))workerLoop, worker);
18471 UA_Job processDelayed = {.
type = UA_JOBTYPE_METHODCALL,
18478 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18480 result |= nl->
start(nl, server->config.logger);
18489 completeMessages(UA_Server *server,
UA_Job *job) {
18496 "Lost message(s) from Connection %i as memory could not be allocated",
18500 "Could not merge half-received messages on Connection %i with error 0x%08x",
18502 job->
type = UA_JOBTYPE_NOTHING;
18506 job->
type = UA_JOBTYPE_BINARYMESSAGE_ALLOCATED;
18510 job->
type = UA_JOBTYPE_NOTHING;
18514 #ifdef UA_ENABLE_MULTITHREADING 18516 processMainLoopJobs(server);
18521 UA_DateTime nextRepeated = processRepeatedJobs(server, now, &dispatched);
18528 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18533 if(i == server->config.networkLayersSize-1)
18534 jobsSize = nl->
getJobs(nl, &jobs, timeout);
18536 jobsSize = nl->
getJobs(nl, &jobs, 0);
18538 for(
size_t k = 0; k < jobsSize; ++k) {
18539 #ifdef UA_ENABLE_MULTITHREADING 18541 if(jobs[k].type == UA_JOBTYPE_METHODCALL_DELAYED) {
18542 addDelayedJob(server, &jobs[k]);
18543 jobs[k].
type = UA_JOBTYPE_NOTHING;
18548 if(jobs[k].type == UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER)
18549 completeMessages(server, &jobs[k]);
18553 for(
size_t j = 0; j < jobsSize; ++j) {
18554 #ifdef UA_ENABLE_MULTITHREADING 18555 dispatchJob(server, &jobs[j]);
18558 processJob(server, &jobs[j]);
18567 #ifdef UA_ENABLE_MULTITHREADING 18570 pthread_cond_broadcast(&server->dispatchQueue_condition);
18572 processDelayedCallbacks(server);
18577 if(nextRepeated > now)
18583 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18586 size_t stopJobsSize = nl->
stop(nl, &stopJobs);
18587 for(
size_t j = 0; j < stopJobsSize; ++j)
18588 processJob(server, &stopJobs[j]);
18592 #ifdef UA_ENABLE_MULTITHREADING 18594 if(server->workers) {
18596 "Shutting down %u worker thread(s)", server->config.nThreads);
18598 for(
size_t i = 0; i < server->config.nThreads; ++i)
18599 server->workers[i].running =
false;
18600 pthread_cond_broadcast(&server->dispatchQueue_condition);
18601 for(
size_t i = 0; i < server->config.nThreads; ++i)
18602 pthread_join(server->workers[i].thr,
NULL);
18605 server->workers =
NULL;
18609 emptyDispatchQueue(server);
18613 processDelayedCallbacks(server);
18634 #define STARTCHANNELID 1 18635 #define STARTTOKENID 1 18642 cm->currentChannelCount = 0;
18643 cm->server = server;
18657 removeSecureChannelCallback(UA_Server *server,
void *entry) {
18670 "Could not remove the secure channel with error code %s",
18671 UA_StatusCode_name(retval));
18677 UA_atomic_add(&cm->currentChannelCount, (
UA_UInt32)-1);
18688 if(timeout < nowMonotonic || !entry->channel.
connection) {
18690 "SecureChannel has timed out");
18691 removeSecureChannel(cm, entry);
18704 "Channel was purged since maxSecureChannels was " 18705 "reached and channel had no session attached");
18706 removeSecureChannel(cm, entry);
18723 if(cm->currentChannelCount >= cm->server->config.maxSecureChannels && !purgeFirstChannelWithoutSession(cm)){
18756 UA_atomic_add(&cm->currentChannelCount, 1);
18782 UA_ByteString_deleteMembers(&channel->
clientNonce);
18814 return removeSecureChannel(cm, entry);
18827 sm->currentSessionCount = 0;
18828 sm->server = server;
18843 removeSessionCallback(UA_Server *server,
void *entry) {
18852 sentry->session.activated =
false;
18859 "Could not remove session with error code %s",
18860 UA_StatusCode_name(retval));
18866 UA_atomic_add(&sm->currentSessionCount, (
UA_UInt32)-1);
18876 if(sentry->session.validTill >= nowMonotonic)
18879 "Session has timed out");
18880 removeSession(sm, sentry);
18895 "Client tries to use a session that has timed out");
18900 return ¤t->session;
18914 if(sm->currentSessionCount >= sm->server->config.maxSessions)
18921 UA_atomic_add(&sm->currentSessionCount, 1);
18923 newentry->session.sessionId = UA_NODEID_GUID(1,
UA_Guid_random());
18924 newentry->session.authenticationToken = UA_NODEID_GUID(1,
UA_Guid_random());
18930 newentry->session.timeout = sm->server->config.maxSessionTimeout;
18934 *session = &newentry->session;
18947 return removeSession(sm, current);
18959 UA_NodeId_deleteMembers(&node->nodeId);
18960 UA_QualifiedName_deleteMembers(&node->browseName);
18961 UA_LocalizedText_deleteMembers(&node->displayName);
18962 UA_LocalizedText_deleteMembers(&node->description);
18965 node->references =
NULL;
18966 node->referencesSize = 0;
18969 switch(node->nodeClass) {
18979 UA_NodeId_deleteMembers(&p->dataType);
18982 p->arrayDimensions =
NULL;
18983 p->arrayDimensionsSize = 0;
18985 UA_DataValue_deleteMembers(&p->value.data.value);
19012 src->arrayDimensionsSize,
19013 (
void**)&dst->arrayDimensions,
19017 dst->arrayDimensionsSize = src->arrayDimensionsSize;
19018 retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
19019 dst->valueRank = src->valueRank;
19020 dst->valueSource = src->valueSource;
19022 retval |= UA_DataValue_copy(&src->value.data.value,
19023 &dst->value.data.value);
19024 dst->value.data.callback = src->value.data.callback;
19026 dst->value.dataSource = src->value.dataSource;
19032 UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
19045 dst->isAbstract = src->isAbstract;
19089 if(src->nodeClass != dst->nodeClass)
19093 UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
19094 dst->nodeClass = src->nodeClass;
19095 retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
19096 retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
19097 retval |= UA_LocalizedText_copy(&src->description, &dst->description);
19098 dst->writeMask = src->writeMask;
19099 dst->userWriteMask = src->userWriteMask;
19104 retval |=
UA_Array_copy(src->references, src->referencesSize,
19105 (
void**)&dst->references,
19111 dst->referencesSize = src->referencesSize;
19114 switch(src->nodeClass) {
19163 #ifndef UA_ENABLE_MULTITHREADING 19165 #define UA_NODESTORE_MINSIZE 64 19172 #define UA_NODESTORE_TOMBSTONE ((UA_NodeStoreEntry*)0x01) 19184 7, 13, 31, 61, 127, 251,
19185 509, 1021, 2039, 4093, 8191, 16381,
19186 32749, 65521, 131071, 262139, 524287, 1048573,
19187 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
19188 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291
19198 while(low != high) {
19200 if(n > primes[mid])
19211 switch(nodeClass) {
19242 entry->
node.nodeClass = nodeClass;
19311 UA_UInt32 nindex = higher_prime_index(count * 2);
19322 for(
size_t i = 0, j = 0; i < osize && j < count; ++i) {
19361 deleteEntry(entries[i]);
19372 return &entry->
node;
19379 deleteEntry(entry);
19390 tempNodeid = node->nodeId;
19395 if(node->nodeId.namespaceIndex == 0)
19396 node->nodeId.namespaceIndex = 1;
19399 UA_UInt32 increase = mod2(identifier, size);
19401 node->nodeId.identifier.numeric = identifier;
19402 entry = findSlot(ns, &node->nodeId);
19405 identifier += increase;
19406 if(identifier >= size)
19407 identifier -= size;
19410 entry = findSlot(ns, &node->nodeId);
19429 if(*entry != newEntry->
orig) {
19431 deleteEntry(newEntry);
19434 deleteEntry(*entry);
19444 return (
const UA_Node*)&(*entry)->node;
19469 deleteEntry(*slot);
19495 #ifdef UA_ENABLE_MULTITHREADING 19496 #include <urcu/rculfhash.h> 19499 struct cds_lfht_node htn;
19500 struct rcu_head rcu_head;
19501 struct nodeEntry *orig;
19505 static struct nodeEntry * instantiateEntry(
UA_NodeClass class) {
19506 size_t size =
sizeof(
struct nodeEntry) - sizeof(UA_Node);
19535 struct nodeEntry *entry =
UA_calloc(1, size);
19538 entry->node.nodeClass =
class;
19542 static void deleteEntry(
struct rcu_head *head) {
19543 struct nodeEntry *entry =
container_of(head,
struct nodeEntry, rcu_head);
19549 static int compare(
struct cds_lfht_node *htn,
const void *orig) {
19552 const UA_NodeId *newid = &((
struct nodeEntry *)htn)->node.nodeId;
19558 return (
UA_NodeStore*)cds_lfht_new(64, 64, 0, CDS_LFHT_AUTO_RESIZE,
NULL);
19564 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19565 struct cds_lfht_iter iter;
19566 cds_lfht_first(ht, &iter);
19568 if(!cds_lfht_del(ht, iter.node)) {
19570 struct nodeEntry *entry = (
struct nodeEntry*) iter.
node;
19571 call_rcu(&entry->rcu_head, deleteEntry);
19573 cds_lfht_next(ht, &iter);
19576 cds_lfht_destroy(ht,
NULL);
19581 struct nodeEntry *entry = instantiateEntry(
class);
19584 return (UA_Node*)&entry->node;
19588 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19589 deleteEntry(&entry->rcu_head);
19594 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19595 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19596 cds_lfht_node_init(&entry->htn);
19597 struct cds_lfht_node *result;
19600 tempNodeid = node->nodeId;
19604 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19606 if(result != &entry->htn) {
19607 deleteEntry(&entry->rcu_head);
19613 if(node->nodeId.namespaceIndex == 0)
19614 node->nodeId.namespaceIndex = 1;
19616 unsigned long identifier;
19617 long before, after;
19618 cds_lfht_count_nodes(ht, &before, &identifier, &after);
19621 node->nodeId.identifier.numeric = (
UA_UInt32)identifier;
19624 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19625 if(result == &entry->htn)
19627 node->nodeId.identifier.numeric += (
UA_UInt32)(identifier * 2654435761);
19635 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19636 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19640 struct cds_lfht_iter iter;
19641 cds_lfht_lookup(ht, h, compare, &node->nodeId, &iter);
19646 struct nodeEntry *oldEntry = (
struct nodeEntry*)iter.node;
19647 if(oldEntry != entry->orig) {
19648 deleteEntry(&entry->rcu_head);
19652 cds_lfht_node_init(&entry->htn);
19653 if(cds_lfht_replace(ht, &iter, h, compare, &node->nodeId, &entry->htn) != 0) {
19655 deleteEntry(&entry->rcu_head);
19660 call_rcu(&oldEntry->rcu_head, deleteEntry);
19666 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19668 struct cds_lfht_iter iter;
19669 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19670 if(!iter.node || cds_lfht_del(ht, iter.node) != 0)
19672 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19673 call_rcu(&entry->rcu_head, deleteEntry);
19679 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19681 struct cds_lfht_iter iter;
19682 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19683 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19686 return &found_entry->node;
19691 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19693 struct cds_lfht_iter iter;
19694 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19695 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19698 struct nodeEntry *
new = instantiateEntry(entry->node.nodeClass);
19702 deleteEntry(&new->rcu_head);
19711 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19712 struct cds_lfht_iter iter;
19713 cds_lfht_first(ht, &iter);
19714 while(iter.node !=
NULL) {
19715 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19716 visitor(&found_entry->node);
19717 cds_lfht_next(ht, &iter);
19740 UA_ApplicationDescription_copy(&server->config.applicationDescription, descr);
19751 UA_ApplicationDescription_delete(descr);
19759 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
19773 if(endpointUrl->
length > 0) {
19774 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with endpointUrl " \
19777 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with an empty endpointUrl");
19787 size_t relevant_count = 0;
19790 relevant_endpoints[j] =
true;
19797 relevant_endpoints[j] =
true;
19804 if(relevant_count == 0) {
19810 size_t clone_times = 1;
19812 if(endpointUrl->
length == 0) {
19813 clone_times = server->config.networkLayersSize;
19814 nl_endpointurl =
true;
19826 for(
size_t i = 0; i < clone_times; ++i) {
19828 endpointUrl = &server->config.networkLayers[i].discoveryUrl;
19830 if(!relevant_endpoints[j])
19864 "Connection %i | SecureChannel %i | OpenSecureChannel: Opened SecureChannel",
19868 "Connection %i | OpenSecureChannel: Opening a SecureChannel failed",
19877 "Connection %i | SecureChannel %i | OpenSecureChannel: SecureChannel renewed",
19881 "Connection %i | OpenSecureChannel: Renewing SecureChannel failed",
19920 UA_Session *newSession;
19924 UA_LOG_DEBUG_CHANNEL(server->config.logger, channel,
"Processing CreateSessionRequest failed");
19951 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19960 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19976 if(server->config.enableAnonymousLogin &&
19984 }
else if(server->config.enableUsernamePasswordLogin &&
20006 for(
size_t i = 0; i < server->config.usernamePasswordLoginsSize; ++i) {
20007 UA_String *user = &server->config.usernamePasswordLogins[i].username;
20008 UA_String *pw = &server->config.usernamePasswordLogins[i].password;
20016 "ActivateSession: Did not find matching username/password");
20028 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Detach from old channel");
20036 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Session activated");
20053 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20060 UA_Variant_init(v);
20062 v->
data = (
void*)(uintptr_t)p;
20090 compatibleValueRankArrayDimensions(
UA_Int32 valueRank,
size_t arrayDimensionsSize) {
20091 switch(valueRank) {
20093 if(arrayDimensionsSize > 1)
20099 if(arrayDimensionsSize > 0)
20103 if(arrayDimensionsSize < 1)
20111 if(arrayDimensionsSize != (
size_t)valueRank)
20125 if(!UA_Variant_isScalar(value))
20127 return compatibleValueRankArrayDimensions(valueRank, arrayDims);
20132 const UA_UInt32 *constraintArrayDimensions,
20133 size_t testArrayDimensionsSize,
20134 const UA_UInt32 *testArrayDimensions) {
20136 if(constraintArrayDimensionsSize == 0) {
20141 if(testArrayDimensionsSize != constraintArrayDimensionsSize)
20145 for(
size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
20146 if(constraintArrayDimensions[i] != testArrayDimensions[i] &&
20147 constraintArrayDimensions[i] != 0)
20156 convertToMatchingValue(UA_Server *server,
const UA_Variant *value,
20159 if(!targetDataType)
20166 UA_Variant_isScalar(value)) {
20172 return editableValue;
20180 *editableValue = *value;
20182 editableValue->
type = targetDataType;
20183 return editableValue;
20199 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
20220 value = convertToMatchingValue(server, value, targetDataTypeId, editableValue);
20231 if(valueArrayDimensions == 0 && !UA_Variant_isScalar(value)) {
20232 valueArrayDimensionsSize = 1;
20234 valueArrayDimensions = &tempArrayDimensions;
20239 if(targetArrayDimensionsSize > 0)
20241 valueArrayDimensionsSize, valueArrayDimensions);
20244 return compatibleValueRankValue(targetValueRank, value);
20261 writeArrayDimensionsAttribute(UA_Server *server,
UA_VariableNode *node,
20262 size_t arrayDimensionsSize,
UA_UInt32 *arrayDimensions) {
20270 UA_StatusCode retval = compatibleValueRankArrayDimensions(node->valueRank, arrayDimensionsSize);
20273 "The current value rank does not match the new array dimensions");
20284 if(vt->arrayDimensions) {
20286 arrayDimensionsSize, arrayDimensions);
20289 "Array dimensions in the variable type do not match");
20296 UA_DataValue_init(&value);
20304 UA_DataValue_deleteMembers(&value);
20307 "Array dimensions in the current value do not match");
20313 UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
20314 retval =
UA_Array_copy(arrayDimensions, arrayDimensionsSize,
20319 node->arrayDimensionsSize = arrayDimensionsSize;
20328 writeValueRankAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20346 switch(constraintValueRank) {
20348 if(valueRank != -1 && valueRank != 1)
20354 if(valueRank != -1)
20362 if(valueRank != constraintValueRank)
20369 size_t arrayDims = node->arrayDimensionsSize;
20371 if(arrayDims == 0) {
20375 UA_DataValue_init(&value);
20381 if(!UA_Variant_isScalar(&value.
value))
20383 UA_DataValue_deleteMembers(&value);
20385 retval = compatibleValueRankArrayDimensions(valueRank, arrayDims);
20391 node->valueRank = valueRank;
20400 writeDataTypeAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20421 constraintDataType, &subtypeId, 1))
20426 UA_DataValue_init(&value);
20432 node->arrayDimensionsSize, node->arrayDimensions,
20434 UA_DataValue_deleteMembers(&value);
20437 "The current value does not match the new data type");
20444 retval = UA_NodeId_copy(dataType, &node->dataType);
20446 node->dataType = dtCopy;
20449 UA_NodeId_deleteMembers(&dtCopy);
20460 if(vn->value.data.callback.onRead) {
20462 vn->value.data.callback.onRead(vn->value.data.callback.handle,
20463 vn->nodeId, &vn->value.data.value.value, rangeptr);
20465 #ifdef UA_ENABLE_MULTITHREADING 20472 *v = vn->value.data.value;
20481 if(!vn->value.dataSource.read)
20488 vn->value.dataSource.read(vn->value.dataSource.handle, vn->nodeId,
20489 sourceTimeStamp, rangeptr, v);
20495 readValueAttributeComplete(UA_Server *server,
const UA_VariableNode *vn,
20502 if(indexRange && indexRange->
length > 0) {
20511 retval = readValueAttributeFromNode(server, vn, v, rangeptr);
20513 retval = readValueAttributeFromDataSource(vn, v, timestamps, rangeptr);
20529 UA_StatusCode retval = UA_DataValue_copy(value, &node->value.data.value);
20531 UA_DataValue_deleteMembers(&old_value);
20533 node->value.data.value = old_value;
20541 if(value->
status != node->value.data.value.status ||
20542 !value->
hasValue || !node->value.data.value.hasValue)
20548 if(UA_Variant_isScalar(&value->
value)) {
20549 editableValue = value->
value;
20551 v = &editableValue;
20561 node->value.data.value.hasStatus = value->
hasStatus;
20562 node->value.data.value.status = value->
status;
20577 if(indexRange && indexRange->
length > 0) {
20591 retval =
typeCheckValue(server, &node->dataType, node->valueRank,
20592 node->arrayDimensionsSize, node->arrayDimensions,
20593 &value->
value, rangeptr, &editableValue.
value);
20607 retval = writeValueAttributeWithoutRange(node, &editableValue);
20609 retval = writeValueAttributeWithRange(node, &editableValue, rangeptr);
20614 #ifdef UA_ENABLE_MULTITHREADING 20618 writtenNode = node;
20622 writtenNode->value.data.callback.onWrite(writtenNode->value.data.callback.handle,
20623 writtenNode->nodeId,
20624 &writtenNode->value.data.value.value, rangeptr);
20628 if(node->value.dataSource.write) {
20630 retval = node->value.dataSource.write(node->value.dataSource.handle,
20631 node->nodeId, &editableValue.
value, rangeptr);
20650 readIsAbstractAttribute(
const UA_Node *node,
UA_Variant *v) {
20652 switch(node->nodeClass) {
20673 writeIsAbstractAttribute(UA_Node *node,
UA_Boolean value) {
20674 switch(node->nodeClass) {
20697 static const UA_String binEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
20700 #define CHECK_NODECLASS(CLASS) \ 20701 if(!(node->nodeClass & (CLASS))) { \ 20702 retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID; \ 20751 forceVariantSetScalar(&v->
value, &node->description, &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20757 forceVariantSetScalar(&v->
value, &node->userWriteMask, &
UA_TYPES[UA_TYPES_UINT32]);
20760 retval = readIsAbstractAttribute(node, &v->
value);
20770 &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20774 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->containsNoLoops,
20779 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->eventNotifier,
20784 retval = readValueAttributeComplete(server, (
const UA_VariableNode*)node,
20799 retval = readArrayDimensionsAttribute((
const UA_VariableNode*)node, v);
20886 if(request->
maxAge < 0) {
20891 for(
size_t i = 0;i < size;++i) {
20896 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20902 UA_ExtensionObject_init(&additionalHeader);
20907 UA_Variant_init(&variant);
20912 variant.
data = expireArray;
20943 UA_DataValue_init(&dv);
20957 UA_ReadValueId_init(&item);
20969 UA_DataValue_deleteMembers(&dv);
20978 retval = UA_Variant_copy(&dv.
value, v);
21003 #define CHECK_DATATYPE_SCALAR(EXP_DT) \ 21004 if(!wvalue->value.hasValue || \ 21005 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21006 !UA_Variant_isScalar(&wvalue->value.value)) { \ 21007 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21011 #define CHECK_DATATYPE_ARRAY(EXP_DT) \ 21012 if(!wvalue->value.hasValue || \ 21013 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21014 UA_Variant_isScalar(&wvalue->value.value)) { \ 21015 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21019 #define CHECK_NODECLASS_WRITE(CLASS) \ 21020 if((node->nodeClass & (CLASS)) == 0) { \ 21021 retval = UA_STATUSCODE_BADNODECLASSINVALID; \ 21028 CopyAttributeIntoNode(UA_Server *server, UA_Session *session,
21039 UA_QualifiedName_deleteMembers(&node->browseName);
21040 UA_QualifiedName_copy(value, &node->browseName);
21044 UA_LocalizedText_deleteMembers(&node->displayName);
21045 UA_LocalizedText_copy(value, &node->displayName);
21049 UA_LocalizedText_deleteMembers(&node->description);
21050 UA_LocalizedText_copy(value, &node->description);
21054 node->writeMask = *(
const UA_UInt32*)value;
21058 node->userWriteMask = *(
const UA_UInt32*)value;
21062 retval = writeIsAbstractAttribute(node, *(
const UA_Boolean*)value);
21103 retval = writeArrayDimensionsAttribute(server, (
UA_VariableNode*)node,
21143 "WriteRequest returned status code %s",
21144 UA_StatusCode_name(retval));
21186 const void *attr) {
21188 UA_WriteValue_init(&wvalue);
21189 wvalue.
nodeId = *nodeId;
21213 addReference(UA_Server *server, UA_Session *session,
21217 deleteReference(UA_Server *server, UA_Session *session,
21221 deleteNode(UA_Server *server, UA_Session *session,
21232 checkParentReference(UA_Server *server, UA_Session *session,
UA_NodeClass nodeClass,
21243 "AddNodes: Parent node not found");
21250 if(!referenceType) {
21252 "AddNodes: Reference type to the parent not found");
21259 "AddNodes: Reference type to the parent invalid");
21266 "AddNodes: Abstract reference type to the parent not allowed");
21279 "AddNodes: New type node need to have a " 21280 "HasSubType reference");
21284 if(parent->nodeClass != nodeClass) {
21286 "AddNodes: New type node needs to be of the same " 21287 "node type as the parent");
21294 const UA_NodeId hierarchicalReference =
21297 &hierarchicalReference, &subtypeId, 1)) {
21299 "AddNodes: Reference type is not hierarchical");
21311 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21313 UA_InstantiationCallback *instantiationCallback);
21316 copyChildNodesToNode(UA_Server *server, UA_Session *session,
21318 UA_InstantiationCallback *instantiationCallback);
21323 copyExistingVariable(UA_Server *server, UA_Session *session,
const UA_NodeId *variable,
21325 UA_InstantiationCallback *instantiationCallback) {
21335 UA_DataValue_init(&value);
21342 UA_VariableAttributes_init(&attr);
21358 UA_AddNodesItem_init(&item);
21375 UA_AddNodesResult_init(&res);
21376 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21381 retval = copyChildNodesToNode(server, session, &node->nodeId,
21385 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21386 instantiationCallback->handle);
21391 UA_Variant_deleteMembers(&value.
value);
21398 copyExistingObject(UA_Server *server, UA_Session *session,
const UA_NodeId *
object,
21400 UA_InstantiationCallback *instantiationCallback) {
21410 UA_ObjectAttributes_init(&attr);
21418 UA_AddNodesItem_init(&item);
21433 UA_AddNodesResult_init(&res);
21434 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21440 UA_StatusCode retval = copyChildNodesToNode(server, session, &node->nodeId,
21443 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21444 instantiationCallback->handle);
21451 setObjectInstanceHandle(UA_Server *server, UA_Session *session,
21461 instantiateNode(UA_Server *server, UA_Session *session,
const UA_NodeId *nodeId,
21463 UA_InstantiationCallback *instantiationCallback) {
21482 size_t hierarchySize = 0;
21489 for(
size_t i = 0; i < hierarchySize; ++i)
21490 retval |= copyChildNodesToNode(server, session, &hierarchy[i], nodeId, instantiationCallback);
21497 const UA_ObjectLifecycleManagement *olm =
21499 if(olm->constructor)
21507 UA_AddReferencesItem_init(&addref);
21512 return addReference(server, session, &addref);
21518 instanceFindAggregateByBrowsename(UA_Server *server, UA_Session *session,
21523 UA_BrowseDescription_init(&bd);
21524 bd.
nodeId = *searchInstance;
21532 UA_BrowseResult_init(&br);
21542 retval = UA_NodeId_copy(&rd->
nodeId.
nodeId, outInstanceNodeId);
21547 UA_BrowseResult_deleteMembers(&br);
21552 mandatoryChild(UA_Server *server, UA_Session *session,
const UA_NodeId *childNodeId) {
21562 for(
size_t i = 0; i < child->referencesSize; ++i) {
21583 copyChildNodesToNode(UA_Server* server, UA_Session* session,
21585 UA_InstantiationCallback* instantiationCallback) {
21588 UA_BrowseDescription_init(&bd);
21589 bd.
nodeId = *sourceNodeId;
21598 UA_BrowseResult_init(&br);
21610 if(!mandatoryChild(server, session, &rd->
nodeId.
nodeId))
21617 retval = instanceFindAggregateByBrowsename(server, session, destinationNodeId,
21627 UA_AddReferencesItem_init(&newItem);
21633 retval = addReference(server, session, &newItem);
21635 retval = copyExistingVariable(server, session, &rd->
nodeId.
nodeId,
21637 instantiationCallback);
21639 retval = copyExistingObject(server, session, &rd->
nodeId.
nodeId,
21641 instantiationCallback);
21654 retval = copyChildNodesToNode(server, session, &rd->
nodeId.
nodeId,
21655 &existingChild, instantiationCallback);
21657 UA_NodeId_deleteMembers(&existingChild);
21662 UA_BrowseResult_deleteMembers(&br);
21670 UA_InstantiationCallback *instantiationCallback,
21682 UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
21683 parentNodeId, referenceTypeId);
21686 "AddNodes: Checking the reference to the parent returned " 21687 "error code %s", UA_StatusCode_name(retval));
21696 "AddNodes: Node could not be added to the nodestore " 21697 "with error code %s", UA_StatusCode_name(retval));
21703 retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
21706 "AddNodes: Could not copy the nodeid");
21714 UA_AddReferencesItem_init(&item);
21719 retval = addReference(server, session, &item);
21722 "AddNodes: Could not add the reference to the parent" 21723 "with error code %s", UA_StatusCode_name(retval));
21735 typeDefinition = &basedatavariabletype;
21737 typeDefinition = &baseobjecttype;
21741 retval = instantiateNode(server, session, &node->nodeId, node->nodeClass,
21742 typeDefinition, instantiationCallback);
21745 "AddNodes: Could not instantiate the node with" 21746 "error code %s", UA_StatusCode_name(retval));
21752 if(instantiationCallback)
21753 instantiationCallback->method(node->nodeId, *typeDefinition,
21754 instantiationCallback->handle);
21758 deleteNode(server, &adminSession, &node->nodeId,
true);
21771 retval |= UA_QualifiedName_copy(&item->
browseName, &node->browseName);
21772 retval |= UA_LocalizedText_copy(&attr->
displayName, &node->displayName);
21773 retval |= UA_LocalizedText_copy(&attr->
description, &node->description);
21780 copyCommonVariableAttributes(UA_Server *server,
UA_VariableNode *node,
21787 typeDef = &basedatavartype;
21794 node->valueRank = -2;
21809 retval = UA_NodeId_copy(&vt->dataType, &node->dataType);
21822 "Array dimensions incompatible with the VariableType " 21823 "with error code %s", UA_StatusCode_name(retval));
21832 node->valueRank = vt->valueRank;
21835 "Value Rank incompatible with the VariableType " 21836 "with error code %s", UA_StatusCode_name(retval));
21842 UA_DataValue_init(&value);
21852 "Could not read the value of the variable type " 21853 "with error code %s", UA_StatusCode_name(retval));
21862 "Could not set the value of the new node " 21863 "with error code %s", UA_StatusCode_name(retval));
21865 UA_DataValue_deleteMembers(&value);
21870 copyVariableNodeAttributes(UA_Server *server,
UA_VariableNode *vnode,
21877 return copyCommonVariableAttributes(server, vnode, item, attr);
21885 return copyCommonVariableAttributes(server, (
UA_VariableNode*)vtnode, item,
21924 #define CHECK_ATTRIBUTES(TYPE) \ 21925 if(item->nodeAttributes.content.decoded.type != &UA_TYPES[UA_TYPES_##TYPE]) { \ 21926 retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \ 21931 createNodeFromAttributes(UA_Server *server,
const UA_AddNodesItem *item, UA_Node **newNode) {
21945 UA_StatusCode retval = copyStandardAttributes(node, item, data);
21949 retval |= copyObjectNodeAttributes(node, data);
21953 retval |= copyVariableNodeAttributes(server, node, item, data);
21957 retval |= copyObjectTypeNodeAttributes(node, data);
21961 retval |= copyVariableTypeNodeAttributes(server, node, item, data);
21965 retval |= copyReferenceTypeNodeAttributes(node, data);
21969 retval |= copyDataTypeNodeAttributes(node, data);
21973 retval |= copyViewNodeAttributes(node, data);
21989 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21991 UA_InstantiationCallback *instantiationCallback) {
21993 UA_Node *node =
NULL;
21994 result->
statusCode = createNodeFromAttributes(server, item, &node);
21997 "Could not add node with error code %s",
22009 "Could not add node with error code %s",
22032 for(
size_t i = 0; i < size; ++i) {
22033 Service_AddNodes_single(server, session, &request->
nodesToAdd[i],
22044 UA_InstantiationCallback *instantiationCallback,
UA_NodeId *outNewNodeId) {
22047 UA_AddNodesItem_init(&item);
22056 .content.decoded = {attributeType, (
void*)(uintptr_t)attr}};
22060 UA_AddNodesResult_init(&result);
22062 Service_AddNodes_single(server, &adminSession, &item, &result, instantiationCallback);
22092 UA_DataValue_init(&value);
22093 if(dataSource.read)
22094 retval = dataSource.read(dataSource.handle, requestedNewNodeId,
22095 false,
NULL, &value);
22108 UA_AddNodesItem_init(&item);
22113 retval |= copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&editAttr);
22114 retval |= copyVariableNodeAttributes(server, node, &item, &editAttr);
22115 UA_DataValue_deleteMembers(&node->value.data.value);
22117 node->value.dataSource = dataSource;
22118 UA_DataValue_deleteMembers(&value);
22127 UA_AddNodesResult_init(&result);
22129 &referenceTypeId, &typeDefinition,
NULL, outNewNodeId);
22134 #ifdef UA_ENABLE_METHODCALLS 22137 UA_Server_addMethodNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
22140 UA_MethodCallback method,
void *handle,
22141 size_t inputArgumentsSize,
const UA_Argument* inputArguments,
22142 size_t outputArgumentsSize,
const UA_Argument* outputArguments,
22149 UA_AddNodesItem_init(&item);
22152 copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&attr);
22153 node->executable = attr.executable;
22154 node->userExecutable = attr.userExecutable;
22155 node->attachedMethod = method;
22156 node->methodHandle = handle;
22160 UA_NodeId_init(&newMethodId);
22163 &referenceTypeId, &UA_NODEID_NULL,
NULL, &newMethodId);
22171 if(inputArgumentsSize > 0) {
22172 UA_VariableNode *inputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22173 inputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22174 inputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"InputArguments");
22175 inputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22176 inputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22177 inputArgumentsVariableNode->valueRank = 1;
22188 inputArgumentsVariableNode->nodeId =
22192 inputArguments, inputArgumentsSize,
22194 inputArgumentsVariableNode->value.data.value.hasValue =
true;
22198 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22202 if(outputArgumentsSize > 0) {
22204 UA_VariableNode *outputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22205 outputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22206 outputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"OutputArguments");
22207 outputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22208 outputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22209 outputArgumentsVariableNode->valueRank = 1;
22214 outputArgumentsVariableNode->nodeId =
22218 outputArguments, outputArgumentsSize,
22220 outputArgumentsVariableNode->value.data.value.hasValue =
true;
22224 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22229 *outNewNodeId = newMethodId;
22231 UA_NodeId_deleteMembers(&newMethodId);
22242 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22247 addOneWayReference(UA_Server *server, UA_Session *session,
22249 size_t i = node->referencesSize;
22250 size_t refssize = (i+1) | 3;
22254 node->references = new_refs;
22255 UA_ReferenceNode_init(&new_refs[i]);
22260 node->referencesSize = i+1;
22262 UA_ReferenceNode_deleteMembers(&new_refs[i]);
22267 addReference(UA_Server *server, UA_Session *session,
22284 UA_AddReferencesItem_init(&secondItem);
22313 "Processing AddReferencesRequest");
22326 for(
size_t i = 0; i < response->
resultsSize; ++i)
22336 UA_AddReferencesItem_init(&item);
22342 UA_StatusCode retval = addReference(server, &adminSession, &item);
22352 removeReferences(UA_Server *server, UA_Session *session,
const UA_Node *node) {
22354 UA_DeleteReferencesItem_init(&item);
22356 for(
size_t i = 0; i < node->referencesSize; ++i) {
22357 item.
isForward = node->references[i].isInverse;
22358 item.
sourceNodeId = node->references[i].targetId.nodeId;
22360 deleteReference(server, session, &item);
22365 deleteNode(UA_Server *server, UA_Session *session,
22384 if(deleteReferences)
22385 removeReferences(server, session, node);
22394 "Processing DeleteNodesRequest");
22409 response->
results[i] = deleteNode(server, session, &item->
nodeId,
22419 &nodeId, deleteReferences);
22430 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22433 for(
size_t i = node->referencesSize; i > 0; --i) {
22441 UA_ReferenceNode_deleteMembers(ref);
22443 node->references[i-1] = node->references[node->referencesSize-1];
22444 --node->referencesSize;
22451 if(node->referencesSize == 0 && node->references) {
22453 node->references =
NULL;
22459 deleteReference(UA_Server *server, UA_Session *session,
22468 UA_DeleteReferencesItem_init(&secondItem);
22482 "Processing DeleteReferencesRequest");
22512 UA_StatusCode retval = deleteReference(server, &adminSession, &item);
22522 setValueCallback(UA_Server *server, UA_Session *session,
22526 node->value.data.callback = *callback;
22532 const UA_ValueCallback callback) {
22545 setDataSource(UA_Server *server, UA_Session *session,
22550 UA_DataValue_deleteMembers(&node->value.data.value);
22551 node->value.dataSource = *dataSource;
22558 const UA_DataSource dataSource) {
22571 setOLM(UA_Server *server, UA_Session *session,
22581 UA_ObjectLifecycleManagement olm) {
22593 #ifdef UA_ENABLE_METHODCALLS 22595 struct addMethodCallback {
22596 UA_MethodCallback callback;
22601 editMethodCallback(UA_Server *server, UA_Session* session,
22602 UA_Node* node,
const void* handle) {
22605 const struct addMethodCallback *newCallback = handle;
22613 UA_Server_setMethodNode_callback(UA_Server *server,
const UA_NodeId methodNodeId,
22614 UA_MethodCallback method,
void *handle) {
22615 struct addMethodCallback cb = { method, handle };
22618 &methodNodeId, editMethodCallback, &cb);
22635 UA_ReferenceDescription_init(descr);
22642 retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->
nodeClass);
22644 retval |= UA_QualifiedName_copy(&curr->browseName, &descr->
browseName);
22646 retval |= UA_LocalizedText_copy(&curr->displayName, &descr->
displayName);
22649 for(
size_t i = 0; i < curr->referencesSize; ++i) {
22664 static const UA_Node *
22677 for(
size_t i = 0; i < relevant_count; ++i) {
22679 is_relevant =
true;
22692 *isExternal =
false;
22698 UA_ByteString_deleteMembers(&cp->identifier);
22699 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
22719 size_t referencesCount = 0;
22720 size_t referencesIndex = 0;
22725 descr = &cp->browseDescription;
22726 maxrefs = cp->maxReferences;
22727 continuationIndex = cp->continuationIndex;
22739 size_t relevant_refs_size = 0;
22750 &relevant_refs, &relevant_refs_size);
22755 relevant_refs_size = 1;
22769 if(node->referencesSize == 0) {
22777 size_t real_maxrefs = maxrefs;
22778 if(real_maxrefs == 0)
22779 real_maxrefs = node->referencesSize;
22780 else if(real_maxrefs > node->referencesSize)
22781 real_maxrefs = node->referencesSize;
22789 size_t skipped = 0;
22792 for(; referencesIndex < node->referencesSize && referencesCount < real_maxrefs; ++referencesIndex) {
22793 isExternal =
false;
22794 const UA_Node *current =
22795 returnRelevantNode(server, descr, all_refs, &node->references[referencesIndex],
22796 relevant_refs, relevant_refs_size, &isExternal);
22800 if(skipped < continuationIndex) {
22803 retval |= fillReferenceDescription(server->
nodestore, current,
22804 &node->references[referencesIndex],
22812 if(referencesCount == 0) {
22820 &
UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
22834 if(referencesIndex == node->referencesSize) {
22836 removeCp(cp, session);
22839 cp->continuationIndex += (
UA_UInt32)referencesCount;
22842 }
else if(maxrefs != 0 && referencesCount >= maxrefs) {
22846 LIST_FOREACH(cpLoop, &session->continuationPoints, pointers) {
22851 removeCp(cpLast, session);
22861 UA_BrowseDescription_copy(descr, &cp->browseDescription);
22862 cp->maxReferences = maxrefs;
22863 cp->continuationIndex = (
UA_UInt32) referencesCount;
22864 UA_Guid *ident = UA_Guid_new();
22866 cp->identifier.data = (
UA_Byte*) ident;
22867 cp->identifier.length =
sizeof(
UA_Guid);
22898 for(
size_t i = 0; i < size; ++i) {
22907 UA_BrowseResult_init(&result);
22915 UA_Server_browseNext_single(UA_Server *server, UA_Session *session,
UA_Boolean releaseContinuationPoint,
22920 if(UA_ByteString_equal(&cp->identifier, continuationPoint)) {
22922 if(!releaseContinuationPoint)
22925 removeCp(cp, session);
22946 for(
size_t i = 0; i < size; ++i)
22955 UA_BrowseResult_init(&result);
22957 UA_Server_browseNext_single(server, &adminSession, releaseContinuationPoint,
22958 continuationPoint, &result);
22969 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount,
22971 const UA_NodeId *reftypes,
size_t reftypes_count,
22980 for(
size_t j = 0; j < reftypes_count; ++j) {
22999 result->
targets = tempTargets;
23000 (*targetsSize) *= 2;
23008 if(*nextSize <= *nextCount) {
23018 &(*next)[*nextCount]);
23023 walkBrowsePathElement(UA_Server *server, UA_Session *session,
23027 const UA_NodeId *current,
const size_t currentCount,
23028 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23031 size_t reftypes_count = 1;
23048 for(
size_t i = 0; i < currentCount; ++i) {
23060 if(targetName && (targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23066 for(
size_t r = 0; r < node->referencesSize &&
23069 walkBrowsePathElementNodeReference(result, targetsSize, next, nextSize, nextCount,
23071 reftypes, reftypes_count, reference);
23081 addBrowsePathTargets(UA_Server *server, UA_Session *session,
UA_BrowsePathResult *result,
23083 for(
size_t i = 0; i < currentCount; i++) {
23087 UA_NodeId_deleteMembers(¤t[i]);
23093 if(targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23095 UA_NodeId_deleteMembers(¤t[i]);
23108 walkBrowsePath(UA_Server *server, UA_Session *session,
const UA_BrowsePath *path,
23110 UA_NodeId **current,
size_t *currentSize,
size_t *currentCount,
23111 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23121 walkBrowsePathElement(server, session, result, &targetsSize,
23123 *current, *currentCount, next, nextSize, nextCount);
23126 for(
size_t j = 0; j < *currentCount; j++)
23127 UA_NodeId_deleteMembers(&(*current)[j]);
23139 size_t tSize = *currentSize;
size_t tCount = *currentCount;
UA_NodeId *tT = *current;
23140 *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
23141 *nextSize = tSize; *nextCount = tCount; *next = tT;
23154 if(targetsSize < result->targetsSize + (*currentCount)) {
23160 for(
size_t i = 0; i < *currentCount; ++i)
23161 UA_NodeId_deleteMembers(&(*current)[i]);
23165 result->
targets = newTargets;
23169 addBrowsePathTargets(server, session, result, targetName, *current, *currentCount);
23174 translateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
23190 size_t targetsSize = 10;
23201 size_t currentSize = 10;
23202 size_t currentCount = 0;
23209 size_t nextSize = 10;
23210 size_t nextCount = 0;
23230 walkBrowsePath(server, session, path, result, targetsSize,
23231 ¤t, ¤tSize, ¤tCount,
23232 &next, &nextSize, &nextCount);
23246 UA_BrowsePathTarget_deleteMembers(&result->
targets[i]);
23257 UA_BrowsePathResult_init(&result);
23259 translateBrowsePathToNodeIds(server, &adminSession, browsePath, &result);
23267 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing TranslateBrowsePathsToNodeIdsRequest");
23281 for(
size_t i = 0; i < size; ++i)
23282 translateBrowsePathToNodeIds(server, session, &request->
browsePaths[i],
23319 #ifdef UA_ENABLE_METHODCALLS 23322 getArgumentsVariableNode(UA_Server *server,
const UA_MethodNode *ofMethod,
23325 for(
size_t i = 0; i < ofMethod->referencesSize; ++i) {
23326 if(ofMethod->references[i].isInverse ==
false &&
23327 UA_NodeId_equal(&hasProperty, &ofMethod->references[i].referenceTypeId)) {
23328 const UA_Node *refTarget =
23333 refTarget->browseName.namespaceIndex == 0 &&
23343 argumentsConformsToDefinition(UA_Server *server,
const UA_VariableNode *argRequirements,
23348 size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
23351 if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
23353 if(argReqsSize > argsSize)
23355 if(argReqsSize != argsSize)
23359 for(
size_t i = 0; i < argReqsSize; ++i)
23360 retval |=
typeCheckValue(server, &argReqs[i].dataType, argReqs[i].valueRank,
23361 argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
23362 &args[i],
NULL, &args[i]);
23373 if(!methodCalled) {
23405 for(
size_t i = 0; i < methodCalled->referencesSize; ++i) {
23406 if(methodCalled->references[i].isInverse &&
23407 UA_NodeId_equal(&methodCalled->references[i].targetId.nodeId, &withObject->nodeId)) {
23409 &hasComponentNodeId, &hasSubTypeNodeId, 1);
23421 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"InputArguments"));
23423 if(!inputArguments) {
23429 result->
statusCode = argumentsConformsToDefinition(server, inputArguments,
23439 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"OutputArguments"));
23440 if(outputArguments) {
23451 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23452 methodCallSession = session;
23457 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23458 methodCallSession =
NULL;
23464 void Service_Call(UA_Server *server, UA_Session *session,
23489 UA_CallMethodResult_init(&result);
23504 #ifdef UA_ENABLE_SUBSCRIPTIONS 23506 #define UA_VALUENCODING_MAXSTACK 512 23516 new->subscription =
NULL;
23517 new->currentQueueSize = 0;
23518 new->maxQueueSize = 0;
23521 UA_String_init(&new->indexRange);
23523 UA_NodeId_init(&new->monitoredNodeId);
23525 memset(&new->sampleJobGuid, 0,
sizeof(
UA_Guid));
23526 new->sampleJobIsRegistered =
false;
23537 UA_DataValue_deleteMembers(&val->value);
23540 monitoredItem->currentQueueSize = 0;
23542 UA_String_deleteMembers(&monitoredItem->indexRange);
23543 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23544 UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
23550 if(mon->currentQueueSize < mon->maxQueueSize)
23553 if(mon->discardOldest)
23556 queueItem =
TAILQ_LAST(&mon->queue, QueueOfQueueDataValues);
23559 UA_DataValue_deleteMembers(&queueItem->value);
23561 --mon->currentQueueSize;
23595 if(binsize > UA_VALUENCODING_MAXSTACK &&
23602 size_t encodingOffset = 0;
23604 NULL,
NULL, encoding, &encodingOffset);
23609 encoding->
length = encodingOffset;
23610 if(!mon->lastSampledValue.data || !
UA_String_equal(encoding, &mon->lastSampledValue))
23627 "Subscription %u | MonitoredItem %i | " 23628 "Not a data change notification",
23629 sub->subscriptionID, monitoredItem->itemId);
23635 UA_ReadValueId_init(&rvid);
23636 rvid.
nodeId = monitoredItem->monitoredNodeId;
23638 rvid.
indexRange = monitoredItem->indexRange;
23640 UA_DataValue_init(&value);
23647 valueEncoding.
data = stackValueEncoding;
23648 valueEncoding.
length = UA_VALUENCODING_MAXSTACK;
23652 UA_StatusCode retval = detectValueChange(monitoredItem, &value,
23653 &valueEncoding, &changed);
23659 if(!newQueueItem) {
23661 "Subscription %u | MonitoredItem %i | " 23662 "Item for the publishing queue could not be allocated",
23663 sub->subscriptionID, monitoredItem->itemId);
23668 if(valueEncoding.
data == stackValueEncoding) {
23672 "Subscription %u | MonitoredItem %i | " 23673 "ByteString to compare values could not be created",
23674 sub->subscriptionID, monitoredItem->itemId);
23678 valueEncoding = cbs;
23685 "Subscription %u | MonitoredItem %i | " 23686 "Item for the publishing queue could not be prepared",
23687 sub->subscriptionID, monitoredItem->itemId);
23692 newQueueItem->value = value;
23694 newQueueItem->clientHandle = monitoredItem->clientHandle;
23699 "Subscription %u | MonitoredItem %u | Sampled a new value",
23700 sub->subscriptionID, monitoredItem->itemId);
23703 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23704 monitoredItem->lastSampledValue = valueEncoding;
23707 ensureSpaceInMonitoredItemQueue(monitoredItem);
23709 ++monitoredItem->currentQueueSize;
23713 if(valueEncoding.
data != stackValueEncoding)
23714 UA_ByteString_deleteMembers(&valueEncoding);
23715 UA_DataValue_deleteMembers(&value);
23721 job.
type = UA_JOBTYPE_METHODCALL;
23726 &mon->sampleJobGuid);
23728 mon->sampleJobIsRegistered =
true;
23733 if(!mon->sampleJobIsRegistered)
23735 mon->sampleJobIsRegistered =
false;
23747 new->session = session;
23748 new->subscriptionID = subscriptionID;
23749 new->sequenceNumber = 0;
23750 new->maxKeepAliveCount = 0;
23751 new->publishingEnabled =
false;
23752 memset(&new->publishJobGuid, 0,
sizeof(
UA_Guid));
23753 new->publishJobIsRegistered =
false;
23754 new->currentKeepAliveCount = 0;
23755 new->currentLifetimeCount = 0;
23756 new->lastMonitoredItemId = 0;
23760 new->retransmissionQueueSize = 0;
23777 TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
23778 UA_NotificationMessage_deleteMembers(&nme->message);
23781 subscription->retransmissionQueueSize = 0;
23788 if(mon->itemId == monitoredItemID)
23799 if(mon->itemId == monitoredItemID) {
23810 size_t notifications = 0;
23811 if(sub->publishingEnabled) {
23816 if(notifications >= sub->notificationsPerPublish) {
23817 *moreNotifications =
true;
23824 return notifications;
23828 UA_Subscription_addRetransmissionMessage(UA_Server *server,
UA_Subscription *sub,
23831 if(server->config.maxRetransmissionQueueSize > 0 &&
23832 sub->retransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
23834 TAILQ_LAST(&sub->retransmissionQueue, UA_ListOfNotificationMessages);
23835 TAILQ_REMOVE(&sub->retransmissionQueue, lastentry, listEntry);
23836 --sub->retransmissionQueueSize;
23837 UA_NotificationMessage_deleteMembers(&lastentry->message);
23843 ++sub->retransmissionQueueSize;
23850 if(entry->message.sequenceNumber != sequenceNumber)
23852 TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
23853 --sub->retransmissionQueueSize;
23854 UA_NotificationMessage_deleteMembers(&entry->message);
23863 size_t notifications) {
23893 if(l >= notifications)
23897 min->
value = qv->value;
23900 --mon->currentQueueSize;
23907 UA_NotificationMessage_deleteMembers(message);
23913 "Publish Callback", sub->subscriptionID);
23917 size_t notifications = countQueuedNotifications(sub, &moreNotifications);
23920 if(notifications == 0) {
23921 ++sub->currentKeepAliveCount;
23922 if(sub->currentKeepAliveCount < sub->maxKeepAliveCount)
23925 "Subscription %u | Sending a KeepAlive",
23926 sub->subscriptionID)
23935 UA_PublishResponseEntry *pre =
SIMPLEQ_FIRST(&sub->session->responseQueue);
23940 "Subscription %u | Cannot send a publish response " 23941 "since the publish queue is empty", sub->subscriptionID)
23945 ++sub->currentLifetimeCount;
23946 if(sub->currentLifetimeCount > sub->lifeTimeCount) {
23948 "End of lifetime for subscription", sub->subscriptionID);
23949 UA_Session_deleteSubscription(server, sub->session, sub->subscriptionID);
23958 if(notifications > 0) {
23961 if(!retransmission) {
23963 "Subscription %u | Could not allocate memory " 23964 "for retransmission", sub->subscriptionID);
23969 prepareNotificationMessage(sub, message, notifications);
23972 "Subscription %u | Could not prepare the " 23973 "notification message", sub->subscriptionID);
23989 if(notifications == 0) {
24000 UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
24004 size_t available = sub->retransmissionQueueSize;
24005 if(available > 0) {
24018 "Subscription %u | Sending out a publish response with %u " 24019 "notifications", sub->subscriptionID, (
UA_UInt32)notifications);
24025 sub->currentKeepAliveCount = 0;
24026 sub->currentLifetimeCount = 0;
24034 if(moreNotifications)
24040 if(sub->publishJobIsRegistered)
24044 "Subscription %u | Register subscription publishing callback",
24045 sub->subscriptionID);
24047 job.
type = UA_JOBTYPE_METHODCALL;
24052 &sub->publishJobGuid);
24054 sub->publishJobIsRegistered =
true;
24060 if(!sub->publishJobIsRegistered)
24063 "Subscription %u | Unregister subscription publishing callback",
24064 sub->subscriptionID);
24065 sub->publishJobIsRegistered =
false;
24075 UA_NodeId_delete(sessionToken);
24078 if(!session ||
LIST_FIRST(&session->serverSubscriptions))
24082 UA_PublishResponseEntry *pre;
24090 UA_PublishResponse_deleteMembers(response);
24104 #ifdef UA_ENABLE_SUBSCRIPTIONS 24106 #define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \ 24107 if(SRC > BOUNDS.max) DST = BOUNDS.max; \ 24108 else if(SRC < BOUNDS.min) DST = BOUNDS.min; \ 24113 setSubscriptionSettings(UA_Server *server,
UA_Subscription *subscription,
24122 "Could not unregister publish job with error code 0x%08x",
24123 subscription->subscriptionID, retval);
24126 subscription->publishingInterval = requestedPublishingInterval;
24127 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
24128 requestedPublishingInterval, subscription->publishingInterval);
24130 if(requestedPublishingInterval != requestedPublishingInterval)
24131 subscription->publishingInterval = server->config.publishingIntervalLimits.min;
24132 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
24133 requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
24134 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
24135 requestedLifetimeCount, subscription->lifeTimeCount);
24136 if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
24137 subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
24138 subscription->notificationsPerPublish = maxNotificationsPerPublish;
24139 if(maxNotificationsPerPublish == 0 ||
24140 maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
24141 subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
24142 subscription->priority = priority;
24147 "Could not register publish job with error code 0x%08x",
24148 subscription->subscriptionID, retval);
24157 if(!newSubscription) {
24159 "Processing CreateSubscriptionRequest failed");
24163 newSubscription->subscriptionID = UA_Session_getUniqueSubscriptionID(session);
24164 UA_Session_addSubscription(session, newSubscription);
24171 newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount;
24180 "CreateSubscriptionRequest: Created Subscription %u " 24181 "with a publishing interval of %f ms", response->
subscriptionId,
24182 newSubscription->publishingInterval);
24190 "Processing ModifySubscriptionRequest");
24200 sub->currentLifetimeCount = 0;
24211 "Processing SetPublishingModeRequest");
24225 for(
size_t i = 0; i < size; ++i) {
24227 UA_Session_getSubscriptionByID(session, request->
subscriptionIds[i]);
24234 sub->currentLifetimeCount = 0;
24244 mon->monitoringMode = monitoringMode;
24255 samplingInterval < vn->minimumSamplingInterval)
24259 samplingInterval = 10000.0f;
24261 mon->samplingInterval = samplingInterval;
24262 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
24263 samplingInterval, mon->samplingInterval);
24264 if(samplingInterval != samplingInterval)
24265 mon->samplingInterval = server->config.samplingIntervalLimits.min;
24274 mon->trigger = filter->
trigger;
24278 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
24289 static const UA_String binaryEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
24293 Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session,
24302 UA_DataValue_init(&v);
24309 UA_DataValue_deleteMembers(&v);
24312 UA_DataValue_deleteMembers(&v);
24336 &newMon->monitoredNodeId);
24342 newMon->subscription = sub;
24344 newMon->itemId = ++(sub->lastMonitoredItemId);
24345 newMon->timestampsToReturn = timestampsToReturn;
24346 setMonitoredItemSettings(server, newMon, request->
monitoringMode,
24366 "Processing CreateMonitoredItemsRequest");
24381 sub->currentLifetimeCount = 0;
24396 Service_CreateMonitoredItems_single(server, session, sub, request->
timestampsToReturn,
24401 Service_ModifyMonitoredItems_single(UA_Server *server, UA_Session *session,
UA_Subscription *sub,
24410 setMonitoredItemSettings(server, mon, mon->monitoringMode,
24420 "Processing ModifyMonitoredItemsRequest");
24436 sub->currentLifetimeCount = 0;
24451 Service_ModifyMonitoredItems_single(server, session, sub, &request->
itemsToModify[i],
24478 for(
size_t i = 0; i < response->
resultsSize; ++i) {
24502 if(
LIST_EMPTY(&session->serverSubscriptions)) {
24507 UA_PublishResponseEntry *entry =
UA_malloc(
sizeof(UA_PublishResponseEntry));
24512 entry->requestId = requestId;
24516 UA_PublishResponse_init(response);
24536 "Cannot process acknowledgements subscription %u",
24551 LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
24554 "Response on a late subscription", immediate->subscriptionID,
24564 UA_PublishResponse_init(&err_response);
24578 "Processing DeleteSubscriptionsRequest");
24606 if(
LIST_FIRST(&session->serverSubscriptions))
24608 UA_NodeId *sessionToken = UA_NodeId_new();
24620 "Processing DeleteMonitoredItemsRequest");
24635 sub->currentLifetimeCount = 0;
24658 sub->currentLifetimeCount = 0;
24662 TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
24686 static void UA_Client_init(
UA_Client* client, UA_ClientConfig config) {
24689 client->
config = config;
24696 UA_Client_init(client, config);
24700 static void UA_Client_deleteMembers(
UA_Client* client) {
24706 UA_UserTokenPolicy_deleteMembers(&client->
token);
24709 UA_String_deleteMembers(&client->
username);
24711 UA_String_deleteMembers(&client->
password);
24712 #ifdef UA_ENABLE_SUBSCRIPTIONS 24713 UA_Client_NotificationsAckNumber *n, *tmp;
24718 UA_Client_Subscription *sub, *tmps;
24720 UA_Client_Subscriptions_forceDelete(client, sub);
24725 UA_Client_deleteMembers(client);
24726 UA_Client_init(client, client->
config);
24730 UA_Client_deleteMembers(client);
24736 return UA_CLIENTSTATE_ERRORED;
24737 return client->
state;
24744 #define UA_MINMESSAGESIZE 8192 24765 retval = UA_TcpHelloMessage_encodeBinary(&hello, &message, &offset);
24766 UA_TcpHelloMessage_deleteMembers(&hello);
24773 retval |= UA_TcpMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24781 retval = conn->
send(conn, &message);
24784 "Sending HEL failed");
24788 "Sent HEL message");
24794 client->
config.timeout);
24797 "Receiving ACK message failed");
24804 retval = UA_TcpMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24805 retval |= UA_TcpAcknowledgeMessage_decodeBinary(&reply, &offset, &ackMessage);
24811 UA_ByteString_deleteMembers(&reply);
24830 UA_TcpAcknowledgeMessage_deleteMembers(&ackMessage);
24851 size_t offset = 12;
24855 UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
24856 asymHeader.
securityPolicyUri = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
24857 retval = UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &message, &offset);
24863 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
24868 retval |= UA_NodeId_encodeBinary(&requestType, &message, &offset);
24872 UA_OpenSecureChannelRequest_init(&opnSecRq);
24878 "Requesting to renew the SecureChannel");
24882 "Requesting to open a SecureChannel");
24887 retval |= UA_OpenSecureChannelRequest_encodeBinary(&opnSecRq, &message, &offset);
24898 retval |= UA_SecureConversationMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24908 retval = conn->
send(conn, &message);
24916 client->
config.timeout);
24919 "Receiving OpenSecureChannelResponse failed");
24925 retval = UA_SecureConversationMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24926 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&reply, &offset, &asymHeader);
24927 retval |= UA_SequenceHeader_decodeBinary(&reply, &offset, &seqHeader);
24928 retval |= UA_NodeId_decodeBinary(&reply, &offset, &requestType);
24932 UA_ByteString_deleteMembers(&reply);
24933 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24934 UA_NodeId_deleteMembers(&requestType);
24936 "Reply answers the wrong request. Expected OpenSecureChannelResponse.");
24945 retval = UA_OpenSecureChannelResponse_decodeBinary(&reply, &offset, &response);
24951 UA_ByteString_deleteMembers(&reply);
24971 "SecureChannel renewed");
24974 "SecureChannel opened");
24978 "SecureChannel could not be renewed " 24979 "with error code %s", UA_StatusCode_name(retval));
24982 "SecureChannel could not be opened " 24983 "with error code %s", UA_StatusCode_name(retval));
24987 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24988 UA_OpenSecureChannelResponse_deleteMembers(&response);
24995 UA_ActivateSessionRequest_init(&request);
25003 UA_AnonymousIdentityToken_init(identityToken);
25010 UA_UserNameIdentityToken_init(identityToken);
25025 "ActivateSession failed with error code %s",
25030 UA_ActivateSessionRequest_deleteMembers(&request);
25031 UA_ActivateSessionResponse_deleteMembers(&response);
25037 GetEndpoints(
UA_Client *client,
size_t* endpointDescriptionsSize,
25040 UA_GetEndpointsRequest_init(&request);
25047 UA_GetEndpointsResponse_init(&response);
25054 "GetEndpointRequest failed with error code %s",
25055 UA_StatusCode_name(retval));
25056 UA_GetEndpointsResponse_deleteMembers(&response);
25059 *endpointDescriptions = response.
endpoints;
25063 UA_GetEndpointsResponse_deleteMembers(&response);
25068 EndpointsHandshake(
UA_Client *client) {
25070 size_t endpointArraySize = 0;
25071 UA_StatusCode retval = GetEndpoints(client, &endpointArraySize, &endpointArray);
25077 UA_String securityNone = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
25078 UA_String binaryTransport = UA_STRING(
"http://opcfoundation.org/UA-Profile/" 25079 "Transport/uatcp-uasc-uabinary");
25082 for(
size_t i = 0; i < endpointArraySize; ++i) {
25094 endpointFound =
true;
25113 UA_UserTokenPolicy_copy(userToken, &client->
token);
25121 if(!endpointFound) {
25123 "No suitable endpoint found");
25125 }
else if(!tokenFound) {
25127 "No suitable UserTokenPolicy found for the possible endpoints");
25136 UA_CreateSessionRequest_init(&request);
25146 UA_CreateSessionResponse_init(&response);
25153 UA_CreateSessionRequest_deleteMembers(&request);
25154 UA_CreateSessionResponse_deleteMembers(&response);
25161 UA_CloseSessionRequest_init(&request);
25171 UA_CloseSessionRequest_deleteMembers(&request);
25172 UA_CloseSessionResponse_deleteMembers(&response);
25177 CloseSecureChannel(
UA_Client *client) {
25180 UA_CloseSecureChannelRequest_init(&request);
25205 UA_CloseSecureChannelRequest_deleteMembers(&request);
25209 size_t offset = 12;
25210 retval |= UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symHeader, &message, &offset);
25211 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
25212 retval |= UA_NodeId_encodeBinary(&typeId, &message, &offset);
25218 retval |= UA_SecureConversationMessageHeader_encodeBinary(&msgHeader, &message, &offset);
25222 retval = conn->
send(conn, &message);
25227 UA_CloseSecureChannelRequest_deleteMembers(&request);
25233 size_t* endpointDescriptionsSize,
25235 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25237 if(client->
state == UA_CLIENTSTATE_ERRORED)
25257 retval = HelAckHandshake(client);
25259 retval = SecureChannelHandshake(client,
false);
25261 retval = GetEndpoints(client, endpointDescriptionsSize, endpointDescriptions);
25272 const char *username,
const char *password){
25282 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25284 if(client->
state == UA_CLIENTSTATE_ERRORED) {
25291 endpointUrl, client->
config.logger);
25304 retval = HelAckHandshake(client);
25306 retval = SecureChannelHandshake(client,
false);
25308 retval = EndpointsHandshake(client);
25310 retval = SessionHandshake(client);
25312 retval = ActivateSession(client);
25315 client->
state = UA_CLIENTSTATE_CONNECTED;
25327 if(client->
state == UA_CLIENTSTATE_READY)
25333 retval = CloseSession(client);
25336 retval |= CloseSecureChannel(client);
25341 UA_StatusCode retval = SecureChannelHandshake(client,
true);
25343 client->
state = UA_CLIENTSTATE_CONNECTED;
25375 "Server replied with an error message: %s %.*s",
25377 retval = msg->
error;
25381 "Server replied with the wrong message type");
25391 "Reply answers the wrong requestId. " 25392 "Async services are not yet implemented.");
25400 retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
25410 "Reply answers the wrong request. Expected ns=%i,i=%i." 25414 UA_NodeId_deleteMembers(&responseId);
25431 "Error receiving the response");
25438 void *response,
const UA_DataType *responseType) {
25439 UA_init(response, responseType);
25446 client->
state = UA_CLIENTSTATE_ERRORED;
25467 client->
state = UA_CLIENTSTATE_FAULTED;
25473 UA_init(response, responseType);
25483 if(now < maxDate) {
25500 UA_ByteString_deleteMembers(&reply);
25518 UA_ReadRequest_init(&request);
25520 UA_ReadValueId_init(&
id);
25537 UA_ReadResponse_deleteMembers(&response);
25551 UA_ReadResponse_deleteMembers(&response);
25559 UA_BrowseRequest_init(&bReq);
25583 UA_BrowseRequest_deleteMembers(&bReq);
25584 UA_BrowseResponse_deleteMembers(&bResp);
25600 UA_AddReferencesItem_init(&item);
25608 UA_AddReferencesRequest_init(&request);
25614 UA_AddReferencesResponse_deleteMembers(&response);
25618 UA_AddReferencesResponse_deleteMembers(&response);
25621 retval = response.
results[0];
25622 UA_AddReferencesResponse_deleteMembers(&response);
25632 UA_DeleteReferencesItem_init(&item);
25639 UA_DeleteReferencesRequest_init(&request);
25645 UA_DeleteReferencesResponse_deleteMembers(&response);
25649 UA_DeleteReferencesResponse_deleteMembers(&response);
25652 retval = response.
results[0];
25653 UA_DeleteReferencesResponse_deleteMembers(&response);
25661 UA_DeleteNodesItem_init(&item);
25665 UA_DeleteNodesRequest_init(&request);
25671 UA_DeleteNodesResponse_deleteMembers(&response);
25675 UA_DeleteNodesResponse_deleteMembers(&response);
25678 retval = response.
results[0];
25679 UA_DeleteNodesResponse_deleteMembers(&response);
25691 UA_AddNodesRequest_init(&request);
25693 UA_AddNodesItem_init(&item);
25708 UA_AddNodesResponse_deleteMembers(&response);
25712 UA_AddNodesResponse_deleteMembers(&response);
25720 UA_AddNodesResponse_deleteMembers(&response);
25728 #ifdef UA_ENABLE_METHODCALLS 25732 const UA_NodeId methodId,
size_t inputSize,
25733 const UA_Variant *input,
size_t *outputSize,
25737 UA_CallRequest_init(&request);
25739 UA_CallMethodRequest_init(&item);
25757 UA_CallResponse_deleteMembers(&response);
25762 if(output !=
NULL && outputSize !=
NULL) {
25768 UA_CallResponse_deleteMembers(&response);
25786 UA_WriteValue_init(&wValue);
25787 wValue.
nodeId = *nodeId;
25796 UA_WriteRequest_init(&wReq);
25810 UA_WriteResponse_deleteMembers(&wResp);
25817 size_t newArrayDimensionsSize) {
25818 if(!newArrayDimensions)
25822 UA_WriteValue_init(&wValue);
25829 UA_WriteRequest_init(&wReq);
25842 UA_WriteResponse_deleteMembers(&wResp);
25855 UA_ReadValueId_init(&item);
25859 UA_ReadRequest_init(&request);
25871 UA_ReadResponse_deleteMembers(&response);
25884 UA_ReadResponse_deleteMembers(&response);
25891 UA_Variant_init(&res->
value);
25894 }
else if(UA_Variant_isScalar(&res->
value) &&
25903 UA_ReadResponse_deleteMembers(&response);
25910 size_t *outArrayDimensionsSize) {
25912 UA_ReadValueId_init(&item);
25916 UA_ReadRequest_init(&request);
25933 else if(!res->
hasValue || UA_Variant_isScalar(&res->
value))
25938 if(UA_Variant_isScalar(&res->
value) ||
25951 UA_ReadResponse_deleteMembers(&response);
25963 #ifdef UA_ENABLE_SUBSCRIPTIONS 25966 UA_Client_Subscriptions_new(
UA_Client *client, UA_SubscriptionSettings settings,
25969 UA_CreateSubscriptionRequest_init(&request);
25975 request.
priority = settings.priority;
25982 UA_Client_Subscription *newSub =
UA_malloc(
sizeof(UA_Client_Subscription));
25994 newSub->priority = request.
priority;
25997 if(newSubscriptionId)
25998 *newSubscriptionId = newSub->subscriptionID;
26001 UA_CreateSubscriptionResponse_deleteMembers(&response);
26008 UA_Client_Subscription *sub;
26009 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26010 if(sub->subscriptionID == subscriptionId)
26017 UA_Client_MonitoredItem *mon, *tmpmon;
26020 UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
26021 mon->monitoredItemId);
26028 UA_DeleteSubscriptionsRequest_init(&request);
26034 retval = response.
results[0];
26035 UA_DeleteSubscriptionsResponse_deleteMembers(&response);
26039 "Could not remove subscription %u with error code %s",
26040 sub->subscriptionID, UA_StatusCode_name(retval));
26044 UA_Client_Subscriptions_forceDelete(client, sub);
26049 UA_Client_Subscriptions_forceDelete(
UA_Client *client,
26050 UA_Client_Subscription *sub) {
26051 UA_Client_MonitoredItem *mon, *mon_tmp;
26053 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26062 UA_Client_Subscriptions_addMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26064 UA_MonitoredItemHandlingFunction hf,
26065 void *hfContext,
UA_UInt32 *newMonitoredItemId) {
26066 UA_Client_Subscription *sub;
26067 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26068 if(sub->subscriptionID == subscriptionId)
26075 UA_Client_MonitoredItem *newMon =
UA_malloc(
sizeof(UA_Client_MonitoredItem));
26081 UA_CreateMonitoredItemsRequest_init(&request);
26084 UA_MonitoredItemCreateRequest_init(&item);
26106 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26112 UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
26113 newMon->attributeID = attributeID;
26114 newMon->clientHandle = client->monitoredItemHandles;
26115 newMon->samplingInterval = sub->publishingInterval;
26116 newMon->queueSize = 1;
26117 newMon->discardOldest =
true;
26118 newMon->handler = hf;
26119 newMon->handlerContext = hfContext;
26122 *newMonitoredItemId = newMon->monitoredItemId;
26125 "Created a monitored item with client handle %u",
26126 client->monitoredItemHandles);
26128 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26133 UA_Client_Subscriptions_removeMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26135 UA_Client_Subscription *sub;
26136 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26137 if(sub->subscriptionID == subscriptionId)
26143 UA_Client_MonitoredItem *mon;
26145 if(mon->monitoredItemId == monitoredItemId)
26153 UA_DeleteMonitoredItemsRequest_init(&request);
26161 retval = response.
results[0];
26162 UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
26166 "Could not remove monitoreditem %u with error code %s",
26167 monitoredItemId, UA_StatusCode_name(retval));
26172 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26184 UA_Client_Subscription *sub;
26185 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26193 "Processing a publish response on subscription %u with %u notifications",
26205 UA_Client_NotificationsAckNumber *ack;
26206 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26230 UA_Client_MonitoredItem *mon;
26233 mon->handler(mon->monitoredItemId, &mitemNot->
value, mon->handlerContext);
26239 "Could not process a notification with clienthandle %u on subscription %u",
26245 UA_Client_NotificationsAckNumber *tmpAck =
UA_malloc(
sizeof(UA_Client_NotificationsAckNumber));
26248 "Not enough memory to store the acknowledgement for a " 26249 "publish message on subscription %u", sub->subscriptionID);
26253 tmpAck->subAck.subscriptionId = sub->subscriptionID;
26258 UA_Client_Subscriptions_manuallySendPublishRequest(
UA_Client *client) {
26259 if (client->
state == UA_CLIENTSTATE_ERRORED)
26263 while(moreNotifications) {
26265 UA_PublishRequest_init(&request);
26268 UA_Client_NotificationsAckNumber *ack;
26269 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
26279 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26286 UA_Client_processPublishResponse(client, &request, &response);
26289 UA_PublishResponse_deleteMembers(&response);
26290 UA_PublishRequest_deleteMembers(&request);
26306 #define LEAPOCH (946684800LL + 86400*(31+29)) 26308 #define DAYS_PER_400Y (365*400 + 97) 26309 #define DAYS_PER_100Y (365*100 + 24) 26310 #define DAYS_PER_4Y (365*4 + 1) 26314 long long days, secs, years;
26315 int remdays, remsecs, remyears;
26316 int qc_cycles, c_cycles, q_cycles;
26318 int wday, yday, leap;
26319 static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
26322 if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
26326 days = secs / 86400LL;
26327 remsecs = (int)(secs % 86400);
26333 wday = (int)((3+days)%7);
26334 if (wday < 0) wday += 7;
26344 if (c_cycles == 4) --c_cycles;
26348 if (q_cycles == 25) --q_cycles;
26351 remyears = remdays / 365;
26352 if (remyears == 4) --remyears;
26353 remdays -= remyears * 365;
26355 leap = !remyears && (q_cycles || !c_cycles);
26356 yday = remdays + 31 + 28 + leap;
26357 if (yday >= 365+leap) yday -= 365+leap;
26359 years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
26361 for (months=0; days_in_month[months] <= remdays; ++months)
26362 remdays -= days_in_month[months];
26364 if (years+100 > INT_MAX || years+100 < INT_MIN)
26367 tm->tm_year = (int)(years + 100);
26368 tm->tm_mon = months + 2;
26369 if (tm->tm_mon >= 12) {
26373 tm->tm_mday = remdays + 1;
26374 tm->tm_wday = wday;
26375 tm->tm_yday = yday;
26377 tm->tm_hour = remsecs / 3600;
26378 tm->tm_min = remsecs / 60 % 60;
26379 tm->tm_sec = remsecs % 60;
26412 rng->
inc = (initseq << 1u) | 1u;
26414 rng->
state += initial_state;
26419 uint64_t oldstate = rng->
state;
26420 rng->
state = oldstate * 6364136223846793005ULL + rng->
inc;
26421 uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
26422 uint32_t rot = (uint32_t)(oldstate >> 59u);
26423 return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31));
26434 #ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS 26435 static const size_t statusCodeDescriptionsSize = 1;
26437 {0xffffffff,
"StatusCode descriptions not available",
"open62541 was compiled without support for statuscode descriptions"}
26440 static const size_t statusCodeDescriptionsSize = 229;
26460 {
UA_STATUSCODE_BADNOTHINGTODO,
"BadNothingToDo",
"There was nothing to do because the client passed a list of operations with no elements."},
26509 {
UA_STATUSCODE_BADNOTFOUND,
"BadNotFound",
"A requested item was not found or a search operation ended without success."},
26541 {
UA_STATUSCODE_BADNOVALIDCERTIFICATES,
"BadNoValidCertificates",
"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."},
26546 {
UA_STATUSCODE_BADNODEIDREJECTED,
"BadNodeIdRejected",
"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."},
26566 {
UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE,
"GoodResultsMayBeIncomplete",
"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."},
26578 {
UA_STATUSCODE_BADTYPEMISMATCH,
"BadTypeMismatch",
"The value supplied for the attribute is not of the same type as the attribute's value."},
26603 {
UA_STATUSCODE_BADDEVICEFAILURE,
"BadDeviceFailure",
"There has been a failure in the device/data source that generates the value that has affected the value."},
26604 {
UA_STATUSCODE_BADSENSORFAILURE,
"BadSensorFailure",
"There has been a failure in the sensor from which the value is derived by the device/data source."},
26613 {
UA_STATUSCODE_UNCERTAINSUBNORMAL,
"UncertainSubNormal",
"The value is derived from multiple sources and has less than the required number of Good sources."},
26635 {
UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED,
"BadTimestampNotSupported",
"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."},
26640 {
UA_STATUSCODE_GOODMOREDATA,
"GoodMoreData",
"The data or event field was successfully replaced in the historical database."},
26645 {
UA_STATUSCODE_GOODDATAIGNORED,
"GoodDataIgnored",
"The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."},
26647 {
UA_STATUSCODE_GOODEDITED,
"GoodEdited",
"The value does not come from the real source and has been edited by the server."},
26651 {
UA_STATUSCODE_BADDOMINANTVALUECHANGED,
"BadDominantValueChanged",
"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad."},
26652 {
UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED,
"UncertainDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain."},
26653 {
UA_STATUSCODE_BADDEPENDENTVALUECHANGED,
"BadDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad."},
26671 {0xffffffff,
"Unknown",
"Unknown StatusCode"},
26677 for(
size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
26678 if(statusCodeDescriptions[i].code == code)
26679 return &statusCodeDescriptions[i];
26681 return &statusCodeDescriptions[statusCodeDescriptionsSize-1];
26690 #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501) 26693 # undef _WIN32_WINDOWS 26694 # undef _WIN32_WINNT 26695 # define WINVER 0x0501 26696 # define _WIN32_WINDOWS 0x0501 26697 # define _WIN32_WINNT 0x0501 26701 #include <stdlib.h> 26703 #include <string.h> 26707 # include <malloc.h> 26710 # ifdef SLIST_ENTRY 26711 # undef SLIST_ENTRY 26714 # define _WINSOCK_DEPRECATED_NO_WARNINGS 26715 # include <winsock2.h> 26716 # include <ws2tcpip.h> 26717 # define CLOSESOCKET(S) closesocket((SOCKET)S) 26718 # define ssize_t int 26719 # define WIN32_INT (int) 26721 # define CLOSESOCKET(S) close(S) 26722 # define SOCKET int 26724 # include <arpa/inet.h> 26725 # include <netinet/in.h> 26726 # include <sys/select.h> 26727 # include <sys/ioctl.h> 26728 # include <fcntl.h> 26729 # include <unistd.h> 26730 # include <netdb.h> 26732 # include <sys/socket.h> 26734 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 26735 # include <sys/param.h> 26737 # include<sys/socket.h> 26740 # ifndef __CYGWIN__ 26741 # include <netinet/tcp.h> 26747 #if defined(_WIN32) || defined(__OpenBSD__) || \ 26748 (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \ 26749 (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \ 26750 !defined(__GNU_LIBRARY__)) 26751 # define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds) 26752 # define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds) 26754 # define UA_fd_set(fd, fds) FD_SET(fd, fds) 26755 # define UA_fd_isset(fd, fds) FD_ISSET(fd, fds) 26758 #ifdef UA_ENABLE_MULTITHREADING 26759 # include <urcu/uatomic.h> 26763 #define errno__ WSAGetLastError() 26764 # define INTERRUPTED WSAEINTR 26765 # define WOULDBLOCK WSAEWOULDBLOCK 26766 # define AGAIN WSAEWOULDBLOCK 26768 # define errno__ errno 26769 # define INTERRUPTED EINTR 26770 # define WOULDBLOCK EWOULDBLOCK 26771 # define AGAIN EAGAIN 26787 size_t nWritten = 0;
26789 #ifdef MSG_NOSIGNAL 26790 flags = MSG_NOSIGNAL;
26797 size_t bytes_to_send = buf->
length - nWritten;
26801 connection->
close(connection);
26802 socket_close(connection);
26803 UA_ByteString_deleteMembers(buf);
26807 nWritten += (size_t)n;
26808 }
while(nWritten < buf->length);
26809 UA_ByteString_deleteMembers(buf);
26816 if(!response->
data) {
26824 UA_UInt32 timeout_usec = timeout * 1000;
26826 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), timeout_usec % 1000000};
26828 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), (
long int)(timeout_usec % 1000000)};
26830 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26831 (
const char *)&tmptv,
sizeof(
struct timeval));
26833 DWORD timeout_dw = timeout;
26834 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26835 (
const char*)&timeout_dw,
sizeof(DWORD));
26838 UA_ByteString_deleteMembers(response);
26839 socket_close(connection);
26851 UA_UInt32 timeout_usec = timeout * 1000;
26852 struct timeval tmptv = {(
long int)(timeout_usec / 1000000),
26853 (
long int)(timeout_usec % 1000000)};
26854 int retval = select(connection->
sockfd+1, &fdset,
NULL,
NULL, &tmptv);
26856 ret = recv(connection->
sockfd, (
char*)response->
data,
26862 ret = recv(connection->
sockfd, (
char*)response->
data,
26866 ssize_t ret = recv(connection->
sockfd, (
char*)response->
data,
26872 UA_ByteString_deleteMembers(response);
26873 socket_close(connection);
26879 UA_ByteString_deleteMembers(response);
26883 socket_close(connection);
26888 response->
length = (size_t)ret;
26895 if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
26898 int opts = fcntl(sockfd, F_GETFL);
26899 if(opts < 0 || fcntl(sockfd, F_SETFL, opts|O_NONBLOCK) < 0)
26905 static void FreeConnectionCallback(UA_Server *server,
void *ptr) {
26947 #define MAXBACKLOG 100 26972 UA_ByteString_deleteMembers(buf);
26977 UA_ByteString_deleteMembers(buf);
26996 ServerNetworkLayerTCP_closeConnection(
UA_Connection *connection) {
26997 #ifdef UA_ENABLE_MULTITHREADING 27005 #if UA_LOGLEVEL <= 300 27009 "Connection %i | Force closing the connection",
27014 shutdown(connection->
sockfd, 2);
27024 struct sockaddr_in addr;
27025 socklen_t addrlen =
sizeof(
struct sockaddr_in);
27026 int res = getpeername(newsockfd, (
struct sockaddr*)&addr, &addrlen);
27030 "Connection %i | New connection over TCP from %s:%d",
27031 newsockfd, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
27034 "Connection %i | New connection over TCP, " 27035 "getpeername failed with errno %i", newsockfd, errno);
27043 c->
send = socket_write;
27044 c->
close = ServerNetworkLayerTCP_closeConnection;
27054 "No memory for a new Connection");
27072 char hostname[256];
27073 if(gethostname(hostname, 255) == 0) {
27074 char discoveryUrl[256];
27076 du.
length = (size_t)snprintf(discoveryUrl, 255,
"opc.tcp://%s:%d",
27077 hostname, layer->
port);
27079 du.
length = (size_t)_snprintf_s(discoveryUrl, 255, _TRUNCATE,
27080 "opc.tcp://%s:%d", hostname, layer->
port);
27087 SOCKET newsock = socket(PF_INET, SOCK_STREAM, 0);
27089 if(newsock == INVALID_SOCKET)
27095 "Error opening the server socket");
27101 if(setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
27102 (
const char *)&optval,
sizeof(optval)) == -1 ||
27105 "Error during setting of server socket options");
27111 const struct sockaddr_in serv_addr = {
27112 .sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY,
27113 .sin_port = htons(layer->
port), .sin_zero = {0}};
27114 if(bind(newsock, (
const struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
27116 "Error during binding of the server socket");
27124 "Error listening on server socket");
27131 "TCP network layer listening on %.*s",
27145 js[c].
type = UA_JOBTYPE_DETACHCONNECTION;
27150 js[c].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27168 size_t totalJobs = removeClosedConnections(layer, js);
27171 fd_set fdset, errset;
27172 UA_Int32 highestfd = setFDSet(layer, &fdset);
27173 setFDSet(layer, &errset);
27174 struct timeval tmptv = {0, timeout * 1000};
27175 UA_Int32 resultsize = select(highestfd+1, &fdset,
NULL, &errset, &tmptv);
27176 if(totalJobs == 0 && resultsize <= 0) {
27187 if(newsockfd != INVALID_SOCKET)
27192 socket_set_nonblocking(newsockfd);
27195 setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY, (
void *)&i,
sizeof(i));
27196 ServerNetworkLayerTCP_add(layer, (
UA_Int32)newsockfd);
27203 for(
size_t i = 0; i < layer->
mappingsSize && j < (size_t)resultsize; ++i) {
27212 js[totalJobs + j].
type = UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER;
27217 "Connection %i | Connection closed from remote", c->
sockfd);
27219 js[totalJobs + j].
type = UA_JOBTYPE_DETACHCONNECTION;
27224 js[totalJobs + j].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27225 js[totalJobs + j].
job.
methodCall.method = FreeConnectionCallback;
27232 if(totalJobs == 0) {
27244 "Shutting down the TCP network layer with %d open connection(s)",
27253 items[i*2].
type = UA_JOBTYPE_DETACHCONNECTION;
27255 items[(i*2)+1].type = UA_JOBTYPE_METHODCALL_DELAYED;
27256 items[(i*2)+1].job.
methodCall.method = FreeConnectionCallback;
27277 WORD wVersionRequested;
27279 wVersionRequested = MAKEWORD(2, 2);
27280 WSAStartup(wVersionRequested, &wsaData);
27289 layer->
conf = conf;
27290 layer->
port = port;
27293 nl.
start = ServerNetworkLayerTCP_start;
27294 nl.
getJobs = ServerNetworkLayerTCP_getJobs;
27295 nl.
stop = ServerNetworkLayerTCP_stop;
27305 ClientNetworkLayerGetBuffer(
UA_Connection *connection,
size_t length,
27316 UA_ByteString_deleteMembers(buf);
27321 #ifdef UA_ENABLE_MULTITHREADING 27329 socket_close(connection);
27337 WORD wVersionRequested;
27339 wVersionRequested = MAKEWORD(2, 2);
27340 WSAStartup(wVersionRequested, &wsaData);
27348 connection.
send = socket_write;
27349 connection.
recv = socket_recv;
27350 connection.
close = ClientNetworkLayerClose;
27355 char hostname[512];
27357 const char *path =
NULL;
27363 "Server url is invalid: %s", endpointUrl);
27366 "Server url does not begin with 'opc.tcp://' '%s'",
27374 "No port defined, using standard port %d", port);
27377 struct addrinfo hints, *server;
27378 memset(&hints, 0,
sizeof(hints));
27379 hints.ai_socktype = SOCK_STREAM;
27380 hints.ai_family = AF_INET;
27383 snprintf(portStr, 6,
"%d", port);
27385 _snprintf_s(portStr, 6, _TRUNCATE,
"%d", port);
27387 int error = getaddrinfo(hostname, portStr, &hints, &server);
27388 if(error != 0 || !server) {
27390 "DNS lookup of %s failed with error %s",
27391 hostname, gai_strerror(error));
27396 SOCKET clientsockfd = socket(server->ai_family, server->ai_socktype,
27397 server->ai_protocol);
27399 if(clientsockfd == INVALID_SOCKET) {
27401 if(clientsockfd < 0) {
27404 "Could not create client socket");
27405 freeaddrinfo(server);
27411 error = connect(clientsockfd, server->ai_addr,
WIN32_INT server->ai_addrlen);
27412 freeaddrinfo(server);
27414 ClientNetworkLayerClose(&connection);
27417 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
27418 FORMAT_MESSAGE_FROM_SYSTEM |
27419 FORMAT_MESSAGE_IGNORE_INSERTS,
27420 NULL, WSAGetLastError(),
27421 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27422 (LPWSTR)&s, 0,
NULL);
27424 "Connection to %s failed. Error: %d: %S",
27425 endpointUrl, WSAGetLastError(), s);
27429 "Connection to %s failed. Error: %d: %s",
27430 endpointUrl, errno, strerror(errno));
27435 #ifdef SO_NOSIGPIPE 27437 int sso_result = setsockopt(connection.
sockfd,
27438 SOL_SOCKET, SO_NOSIGPIPE,
27439 (
void*)&val,
sizeof(val));
27442 "Couldn't set SO_NOSIGPIPE");
27456 # ifdef SLIST_ENTRY 27457 # undef SLIST_ENTRY 27459 # include <windows.h> 27461 # include <sys/time.h> 27464 #if defined(__APPLE__) || defined(__MACH__) 27465 # include <mach/clock.h> 27466 # include <mach/mach.h> 27470 #if defined(_WIN32) 27474 GetSystemTime(&st);
27475 SystemTimeToFileTime(&st, &ft);
27477 ul.LowPart = ft.dwLowDateTime;
27478 ul.HighPart = ft.dwHighDateTime;
27482 gettimeofday(&tv,
NULL);
27488 #if defined(_WIN32) 27489 LARGE_INTEGER freq, ticks;
27490 QueryPerformanceFrequency(&freq);
27491 QueryPerformanceCounter(&ticks);
27494 #elif defined(__APPLE__) || defined(__MACH__) 27496 clock_serv_t cclock;
27497 mach_timespec_t mts;
27498 host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
27499 clock_get_time(cclock, &mts);
27500 mach_port_deallocate(mach_task_self(), cclock);
27502 #elif !defined(CLOCK_MONOTONIC_RAW) 27503 struct timespec ts;
27504 clock_gettime(CLOCK_MONOTONIC, &ts);
27507 struct timespec ts;
27508 clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
27519 #include <stdarg.h> 27521 #ifdef UA_ENABLE_MULTITHREADING 27522 #include <pthread.h> 27523 static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
27526 const char *
LogLevelNames[6] = {
"trace",
"debug",
"info",
"warning",
"error",
"fatal"};
27527 const char *
LogCategoryNames[6] = {
"network",
"channel",
"session",
"server",
"client",
"userland"};
27529 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27531 # pragma GCC diagnostic push 27532 # pragma GCC diagnostic ignored "-Wformat-nonliteral" 27537 const char *msg, va_list args) {
27539 #ifdef UA_ENABLE_MULTITHREADING 27540 pthread_mutex_lock(&printf_mutex);
27542 printf(
"[%.23s] %s/%s\t", t.
data, LogLevelNames[level], LogCategoryNames[category]);
27543 vprintf(msg, args);
27546 #ifdef UA_ENABLE_MULTITHREADING 27547 pthread_mutex_unlock(&printf_mutex);
27549 UA_ByteString_deleteMembers(&t);
27552 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27554 # pragma GCC diagnostic pop 27569 .sendBufferSize = 65535,
27570 .recvBufferSize = 65535,
27571 .maxMessageSize = 0,
27579 #define MANUFACTURER_NAME "open62541" 27580 #define PRODUCT_NAME "open62541 OPC UA Server" 27581 #define PRODUCT_URI "http://open62541.org" 27582 #define APPLICATION_NAME "open62541-based OPC UA Application" 27583 #define APPLICATION_URI "urn:unconfigured:application" 27585 #define UA_STRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s} 27586 #define UA_STRING_STATIC_NULL {0, NULL} 27588 #define STRINGIFY(arg) #arg 27589 #define VERSION(MAJOR, MINOR, PATCH, LABEL) \ 27590 STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL 27611 .applicationDescription = {
27619 .discoveryUrlsSize = 0,
27620 .discoveryUrls =
NULL },
27624 .networkLayersSize = 0,
27625 .networkLayers =
NULL,
27628 .enableAnonymousLogin =
true,
27629 .enableUsernamePasswordLogin =
true,
27631 .usernamePasswordLoginsSize = 2,
27634 .maxSecureChannels = 40,
27635 .maxSecurityTokenLifetime = 10 * 60 * 1000,
27638 .maxSessions = 100,
27639 .maxSessionTimeout = 60.0 * 60.0 * 1000.0,
27642 .publishingIntervalLimits = { .min = 100.0, .max = 3600.0 * 1000.0 },
27643 .lifeTimeCountLimits = { .max = 15000, .min = 3 },
27644 .keepAliveCountLimits = { .max = 100, .min = 1 },
27645 .maxNotificationsPerPublish = 1000,
27646 .maxRetransmissionQueueSize = 0,
27649 .samplingIntervalLimits = { .min = 50.0, .max = 24.0 * 3600.0 * 1000.0 },
27650 .queueSizeLimits = { .max = 100, .min = 1 }
27659 .secureChannelLifeTime = 10 * 60 * 1000,
27661 .localConnectionConfig = {
27662 .protocolVersion = 0,
27663 .sendBufferSize = 65535,
27664 .recvBufferSize = 65535,
27665 .maxMessageSize = 0,
27674 #ifdef UA_ENABLE_SUBSCRIPTIONS 27676 const UA_SubscriptionSettings UA_SubscriptionSettings_standard = {
27677 .requestedPublishingInterval = 500.0,
27678 .requestedLifetimeCount = 10000,
27679 .requestedMaxKeepAliveCount = 1,
27680 .maxNotificationsPerPublish = 10,
27681 .publishingEnabled =
true,
UA_EndpointDescription * serverEndpoints
UA_SecureChannel * channel
#define UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY
#define LIST_HEAD(name, type)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS
#define UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session, const UA_TranslateBrowsePathsToNodeIdsRequest *request, UA_TranslateBrowsePathsToNodeIdsResponse *response)
UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl, const char *username, const char *password)
size_t subscriptionIdsSize
UA_ResponseHeader responseHeader
UA_NodeId authenticationToken
#define UA_NS0ID_SERVERTYPE
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode(* recv)(UA_Connection *connection, UA_ByteString *response, UA_UInt32 timeout)
size_t continuationPointsSize
#define UA_TYPES_SETMONITORINGMODERESPONSE
UA_VariantStorageType storageType
UA_SecureChannelManager secureChannelManager
void UA_Variant_setScalar(UA_Variant *v, void *UA_RESTRICT p, const UA_DataType *type)
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID
#define UA_STATUSCODE_UNCERTAININITIALVALUE
#define UA_EXPORT
Function Export On Win32: Define UA_DYNAMIC_LINKING and UA_DYNAMIC_LINKING_EXPORT in order to export ...
#define UA_NodeStore_newVariableTypeNode()
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH
#define UA_NS0ID_ENUMERATION
struct UA_ExtensionObject::@1::@2 encoded
uint32_t UA_UInt32
UInt32 ^^^^^^ An integer value between 0 and 4 294 967 295.
#define UA_TYPES_METHODATTRIBUTES
#define UA_BINARY_OVERLAYABLE_INTEGER
String Manipulation The header string.h is defined in the C-standard.
#define UA_STATUSCODE_BADDEVICEFAILURE
#define UA_NS0ID_FROMSTATE
void UA_SecureChannel_revolveTokens(UA_SecureChannel *channel)
#define UA_NS0ID_SERVERSTATUSDATATYPE
#define UA_TYPES_SIGNATUREDATA
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE
UA_QualifiedName targetName
#define UA_STATUSCODE_BADEVENTFILTERINVALID
#define UA_NS0ID_BUILDINFO
#define container_of(ptr, type, member)
UA_StatusCode UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
ApplicationDescription ^^^^^^^^^^^^^^^^^^^^^^ Describes an application and how to find it...
#define UA_NS0ID_SERVER_VENDORSERVERINFO
void Service_DeleteNodes(UA_Server *server, UA_Session *session, const UA_DeleteNodesRequest *request, UA_DeleteNodesResponse *response)
UA_NodeId referenceTypeId
UA_BrowsePathResult UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
#define UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_QUERYDATASET
#define UA_OPEN62541_VER_LABEL
#define UA_STATUSCODE_BADSERVERNOTCONNECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME
#define UA_NS0ID_ORGANIZES
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL
UA_ApplicationType
ApplicationType ^^^^^^^^^^^^^^^ The types of applications.
const UA_EXPORT UA_ConnectionConfig UA_ConnectionConfig_standard
UA_StatusCode UA_NodeStore_remove(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_MonitoredItemNotification * monitoredItems
#define UA_STATUSCODE_GOODDATAIGNORED
#define UA_STATUSCODE_BADENCODINGERROR
#define UA_TYPES_DELETEMONITOREDITEMSREQUEST
#define UA_TYPES_SETPUBLISHINGMODEREQUEST
void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub)
#define UA_TYPES_MODIFYMONITOREDITEMSREQUEST
#define UA_STATUSCODE_BADCERTIFICATEINVALID
UA_ByteString incompleteMessage
#define UA_TYPES_DELETEREFERENCESITEM
void(* UA_Service)(UA_Server *, UA_Session *, const void *request, void *response)
UA_StatusCode innerStatusCode
UA_NodeStore * UA_NodeStore_new(void)
Nodestore Lifecycle ^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE
#define LIST_NEXT(elm, field)
UA_AddNodesItem * nodesToAdd
UA_MonitoredItem * UA_MonitoredItem_new(void)
UA_Boolean UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2)
AddReferencesItem ^^^^^^^^^^^^^^^^^ A request to add a reference to the server address space...
UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_TYPES_READVALUEID
#define UA_TYPES_BROWSEPATH
UA_Boolean containsNoLoops
UA_ByteString serverCertificate
void UA_Client_reset(UA_Client *client)
#define UA_NS0ID_REFERENCETYPESFOLDER
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
RelativePath ^^^^^^^^^^^^ A relative path constructed from reference types and browse names...
TranslateBrowsePathsToNodeIdsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more path...
UA_QualifiedName browseName
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED
struct UA_NodeStoreEntry * orig
UA_DeleteNodesItem * nodesToDelete
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED
UA_String UA_ByteString
ByteString ^^^^^^^^^^ A sequence of octets.
#define UA_STATUSCODE_BADINDEXRANGEINVALID
#define UA_NS0ID_QUALIFIEDNAME
UA_StatusCode UA_Client_manuallyRenewSecureChannel(UA_Client *client)
UA_UInt32 * subscriptionIds
UA_StatusCode Subscription_unregisterPublishJob(UA_Server *server, UA_Subscription *sub)
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED
void(* UA_deleteMembersSignature)(void *p, const UA_DataType *type)
CreateSessionRequest ^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
UA_String securityPolicyUri
void UA_Server_deleteAllRepeatedJobs(UA_Server *server)
#define UA_NS0ID_OBJECTSFOLDER
#define MAXBACKLOG
For the multithreaded mode, assume a single thread that periodically "gets work" from the network lay...
struct UA_ExtensionObject::@1::@3 decoded
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID
QueryFirstRequest ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION
UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId, UA_EditNodeCallback callback, const void *data)
#define UA_TYPES_GUID
Guid ^^^^.
#define UA_STATUSCODE_BADCONDITIONDISABLED
FindServersRequest ^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
#define UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADOUTOFSERVICE
#define TAILQ_REMOVE(head, elm, field)
AddNodesItem ^^^^^^^^^^^^ A request to add a node to the server address space.
#define UA_STATUSCODE_BADCONNECTIONREJECTED
struct ServerNetworkLayerTCP::ConnectionMapping * mappings
UA_ExtensionObjectEncoding encoding
UA_ByteString continuationPoint
void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *message)
#define UA_NodeStore_newObjectTypeNode()
#define CHECK_NODECLASS(CLASS)
CreateMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_Job::@5::@6 binaryMessage
#define TAILQ_FOREACH(var, head, field)
UA_StatusCode UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri, UA_UInt16 *namespaceIndex)
#define CHECK_DATATYPE_ARRAY(EXP_DT)
ServiceFault ^^^^^^^^^^^^ The response returned by all services when there is a service level error...
#define UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE
#define UA_STATUSCODE_BADDISCONNECT
#define UA_NS0ID_VARIABLETYPESFOLDER
UA_StatusCode UA_SecureChannel_processChunks(UA_SecureChannel *channel, const UA_ByteString *chunks, UA_ProcessMessageCallback callback, void *application)
#define UA_TYPES_WRITEREQUEST
UA_CallMethodResult UA_EXPORT UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
Method Call
#define UA_STATUSCODE_BADINTERNALERROR
UA_MonitoringMode
MonitoringMode ^^^^^^^^^^^^^^.
CreateSubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_MonitoredItem UA_MonitoredItem
UA_ChannelSecurityToken securityToken
#define UA_TYPES_ACTIVATESESSIONREQUEST
#define UA_TYPES_GETENDPOINTSREQUEST
bool UA_Boolean
Boolean ^^^^^^^ A two-state logical value (true or false).
#define UA_TYPES_DATAVALUE
DataValue ^^^^^^^^^.
void UA_Client_delete(UA_Client *client)
#define UA_NS0ID_BASEDATATYPE
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_INT16
Int16 ^^^^^.
#define SIMPLEQ_ENTRY(type)
#define UA_TRANSPORT_TCPHELLOMESSAGE
UA_DateTime UA_DateTime_now(void)
DataTypeAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a data type node.
#define UA_INLINE
Inline Functions
UA_UInt32 revisedLifetime
TcpAcknowledgeMessage ^^^^^^^^^^^^^^^^^^^^^ Acknowledge Message.
UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_Session **session)
UA_StatusCode UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, UA_NodeId *outNewNodeId)
UA_StatusCode UA_Client_connect(UA_Client *client, const char *endpointUrl)
UA_StatusCode UA_Client_disconnect(UA_Client *client)
const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL
#define UA_TYPES_PUBLISHREQUEST
struct MonitoredItem_queuedValue MonitoredItem_queuedValue
const UA_DataType * responseType
UA_RelativePathElement * elements
QueryNextRequest ^^^^^^^^^^^^^^^^.
UA_StatusCode UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
#define UA_STATUSCODE_BADNODEIDUNKNOWN
#define UA_TYPES_OPENSECURECHANNELREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS_STATE
#define UA_STATUSCODE_BADWOULDBLOCK
UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node)
Insert / Get / Replace / Remove ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_HASENCODING
#define UA_NS0ID_NONHIERARCHICALREFERENCES
SignatureData ^^^^^^^^^^^^^ A digital signature.
#define UA_TYPES_CLOSESECURECHANNELRESPONSE
DeleteSubscriptionsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADINDEXRANGENODATA
UA_Node * UA_NodeStore_getCopy(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_Double revisedSessionTimeout
#define UA_STATUSCODE_GOODENTRYREPLACED
size_t UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
size_t subscriptionIdsSize
UA_UserTokenType tokenType
#define UA_TYPES_WRITERESPONSE
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID
double UA_Double
Double ^^^^^^ An IEEE double precision (64 bit) floating point value.
MonitoredItemModifyResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG,...)
#define SLIST_FOREACH_SAFE(var, head, field, tvar)
UA_MonitoredItemCreateResult * results
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADSTATENOTACTIVE
#define UA_STATUSCODE_BADTARGETNODEIDINVALID
#define SLIST_REMOVE(head, elm, type, field)
#define UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADDIALOGNOTACTIVE
#define UA_NS0ID_HASMODELLINGRULE
UA_StatusCode __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, void *v)
#define UA_NS0ID_SERVER_AUDITING
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED
#define UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT
ReferenceDescription ^^^^^^^^^^^^^^^^^^^^ The description of a reference.
UA_UInt16 sourcePicoseconds
#define UA_TYPES_USERIDENTITYTOKEN
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE
#define UA_STATUSCODE_GOODMOREDATA
#define SLIST_ENTRY(type)
UA_ResponseHeader responseHeader
UA_String transportProfileUri
#define UA_STATUSCODE_BADTOOMANYMATCHES
#define UA_NS0ID_SERVER_SERVERREDUNDANCY
void Service_UnregisterNodes(UA_Server *server, UA_Session *session, const UA_UnregisterNodesRequest *request, UA_UnregisterNodesResponse *response)
#define UA_TYPES_INT32
Int32 ^^^^^.
#define UA_NodeStore_newReferenceTypeNode()
#define UA_STATUSCODE_BADRESPONSETOOLARGE
#define UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID
const UA_ObjectTypeNode * getObjectNodeType(UA_Server *server, const UA_ObjectNode *node)
BrowseNextRequest ^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
UA_ResponseHeader responseHeader
size_t UA_calcSizeBinary(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID
UA_Guid UA_Guid_random(void)
UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID
#define SIMPLEQ_FIRST(head)
UA_BrowsePathResult * results
const UA_encodeBinarySignature encodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
UA_StatusCode getTypeHierarchy(UA_NodeStore *ns, const UA_Node *rootRef, UA_Boolean inverse, UA_NodeId **typeHierarchy, size_t *typeHierarchySize)
UA_Boolean publishingEnabled
#define UA_TYPES_COUNT
Every type is assigned an index in an array containing the type descriptions.
UA_Session * UA_SecureChannel_getSession(UA_SecureChannel *channel, UA_NodeId *token)
UA_ResponseHeader responseHeader
#define UA_OPEN62541_VER_MAJOR
Library Version
#define UA_NS0ID_HASPROPERTY
DeleteReferencesRequest ^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server address...
Argument ^^^^^^^^ An argument for a method.
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE
size_t subscriptionAcknowledgementsSize
UA_Boolean publishingEnabled
#define UA_NS0ID_HASDESCRIPTION
UA_UInt16 memberTypeIndex
UserNameIdentityToken ^^^^^^^^^^^^^^^^^^^^^ A token representing a user identified by a user name and...
UA_UInt32 * arrayDimensions
UA_StatusCode writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node, const UA_NodeId *dataType, const UA_NodeId *constraintDataType)
#define UA_TYPES_CLOSESESSIONRESPONSE
#define UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel, UA_Session *session, const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response)
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS
UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_HASORDEREDCOMPONENT
#define UA_TYPES_DATACHANGEFILTER
#define UA_STATUSCODE_BADTYPEMISMATCH
UA_RequestHeader requestHeader
UA_BrowseDirection browseDirection
UA_NodeId referenceTypeId
#define UA_STATUSCODE_BADTCPINTERNALERROR
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE
void * UA_Array_new(size_t size, const UA_DataType *type)
CallMethodResult ^^^^^^^^^^^^^^^^.
#define UA_TYPES_UINT32
UInt32 ^^^^^^.
UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char *name)
UA_StatusCode compatibleArrayDimensions(size_t constraintArrayDimensionsSize, const UA_UInt32 *constraintArrayDimensions, size_t testArrayDimensionsSize, const UA_UInt32 *testArrayDimensions)
TcpErrorMessage ^^^^^^^^^^^^^^^ Error Message.
#define UA_STATUSCODE_BADNOTIMPLEMENTED
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Byte accessLevel
UA_ExtensionObjectEncoding
UA_VARIANT_ENCODINGMASKTYPE
#define UA_TYPES_BYTESTRING
ByteString ^^^^^^^^^^.
SignedSoftwareCertificate ^^^^^^^^^^^^^^^^^^^^^^^^^ A software certificate with a digital signature...
#define UA_STATUSCODE_BADVIEWIDUNKNOWN
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID
#define UA_TYPES_UINT64
UInt64 ^^^^^^.
UA_LocalizedText displayName
#define UA_STATUSCODE_BADDATALOST
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED
#define UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN
UA_Boolean UA_Node_hasSubTypeOrInstances(const UA_Node *node)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID
#define UA_STATUSCODE_GOODCALLAGAIN
UA_UInt32 maxRequestMessageSize
UA_String UA_String_fromChars(char const src[])
#define CHECK_NODECLASS_WRITE(CLASS)
const UA_DataType * UA_findDataType(const UA_NodeId *typeId)
Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is the name of the data type...
#define UA_STATUSCODE_BADDATAENCODINGINVALID
UA_StatusCode UA_SecureChannel_generateNonce(UA_ByteString *nonce)
const UA_NodeId UA_NODEID_NULL
UA_ExtensionObject filter
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE
#define UA_STATUSCODE_BADSESSIONIDINVALID
uint16_t UA_UInt16
UInt16 ^^^^^^ An integer value between 0 and 65 535.
#define UA_STATUSCODE_BADBROWSENAMEINVALID
#define UA_STATUSCODE_GOODNODATA
#define UA_NS0ID_UINTEGER
#define UA_NS0ID_HASCAUSE
UA_LocalizedText inverseName
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS
#define UA_NS0ID_BASEDATAVARIABLETYPE
UA_ExtensionObject nodeAttributes
UA_Boolean hasLocalizedText
OpenSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
void Service_Read_single(UA_Server *server, UA_Session *session, UA_TimestampsToReturn timestamps, const UA_ReadValueId *id, UA_DataValue *v)
UA_ClientState UA_Client_getState(UA_Client *client)
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data)
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED
UA_Boolean hasSourcePicoseconds
struct UA_DiagnosticInfo * innerDiagnosticInfo
AddNodesRequest ^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG,...)
#define UA_TYPES_CREATESUBSCRIPTIONREQUEST
#define UA_NS0ID_VIEWSFOLDER
#define UA_TYPES_CALLMETHODRESULT
UA_AsymmetricAlgorithmSecurityHeader clientAsymAlgSettings
#define UA_TYPES_PUBLISHRESPONSE
UA_QualifiedName browseName
UA_SecurityTokenRequestType requestType
#define ADDPROFILEARRAY(x)
UA_StatusCode UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_UInt32 monitoredItemID)
UA_UInt32 protocolVersion
#define UA_TYPES_RELATIVEPATH
UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
#define UA_NS0ID_GENERATESEVENT
#define UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_BROWSERESPONSE
#define UA_TYPES_FINDSERVERSRESPONSE
#define UA_STATUSCODE_BADTIMEOUT
UA_Double revisedPublishingInterval
#define UA_TYPES_MODIFYSUBSCRIPTIONREQUEST
AddNodesResponse ^^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES
#define UA_TYPES_SBYTE
SByte ^^^^^.
struct channel_list_entry channel_list_entry
#define UA_TYPES_ADDNODESITEM
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session, const UA_DeleteMonitoredItemsRequest *request, UA_DeleteMonitoredItemsResponse *response)
SetPublishingModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
UA_NodeId referenceTypeId
const UA_Guid UA_GUID_NULL
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED
UA_String * discoveryUrls
#define UA_TYPES_DELETENODESRESPONSE
UA_ByteString serverNonce
UA_BrowseResult UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr)
Browsing
UA_Double requestedPublishingInterval
#define TAILQ_LAST(head, headname)
UA_StatusCode readValueAttribute(UA_Server *server, const UA_VariableNode *vn, UA_DataValue *v)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST
void UA_NodeStore_deleteNode(UA_Node *node)
#define UA_NS0ID_SERVERCAPABILITIESTYPE
RegisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a ses...
UA_ResponseHeader responseHeader
UA_MonitoredItemModifyResult * results
size_t registeredNodeIdsSize
DeleteMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_StatusCode writeValueAttribute(UA_Server *server, UA_VariableNode *node, const UA_DataValue *value, const UA_String *indexRange)
#define UA_TYPES_CONTENTFILTER
#define UA_TRANSPORT_MESSAGETYPE
UA_UInt32 secondsTillShutdown
#define UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_ARGUMENT
#define TAILQ_INSERT_HEAD(head, elm, field)
void UA_Array_delete(void *p, size_t size, const UA_DataType *type)
#define UA_STATUSCODE_BADNOTCONNECTED
#define UA_TYPES_ADDREFERENCESITEM
#define UA_STATUSCODE_BADSERVERHALTED
ContentFilterResult ^^^^^^^^^^^^^^^^^^^.
ReferenceNode ^^^^^^^^^^^^^ Specifies a reference which belongs to a node.
#define UA_TYPES_MESSAGESECURITYMODE
UA_DataChangeTrigger trigger
UA_EndpointDescription * endpoints
UA_ByteString clientNonce
UA_AddReferencesItem * referencesToAdd
#define UA_STATUSCODE_BADREQUESTTIMEOUT
UA_Boolean includeSubtypes
#define UA_NS0ID_HASCOMPONENT
#define UA_STATUSCODE_BADOUTOFRANGE
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX
UA_UInt32 retransmitSequenceNumber
UA_ExpandedNodeId typeDefinition
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID
UA_StatusCode Subscription_registerPublishJob(UA_Server *server, UA_Subscription *sub)
UA_MonitoringParameters requestedParameters
GetEndpointsResponse ^^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
#define UA_STATUSCODE_BADREFRESHINPROGRESS
UA_ApplicationDescription * servers
#define UA_TYPES_ADDNODESREQUEST
UA_ChannelSecurityToken securityToken
#define UA_TYPES_CREATESESSIONRESPONSE
CallResponse ^^^^^^^^^^^^.
uint64_t UA_UInt64
UInt64 ^^^^^^ An integer value between 0 and 18 446 744 073 709 551 615.
#define UA_TYPES_DELETEREFERENCESRESPONSE
#define UA_STATUSCODE_BADFILTERELEMENTINVALID
#define UA_NODEIDTYPE_NUMERIC_TWOBYTE
#define TAILQ_ENTRY(type)
UA_StatusCode UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID
UA_StatusCode(* UA_exchangeEncodeBuffer)(void *handle, UA_ByteString *buf, size_t offset)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI
SecureConversationMessageAbortBody ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Secure Conversation Message Abo...
SetMonitoringModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
void() UA_ProcessMessageCallback(void *application, UA_SecureChannel *channel, UA_MessageType messageType, UA_UInt32 requestId, const UA_ByteString *message)
Chunking
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED
#define UA_TYPES_FLOAT
Float ^^^^^.
#define UA_STATUSCODE_BADTOOMANYSESSIONS
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED
UA_Double revisedPublishingInterval
UA_Boolean containsNoLoops
void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
SecureChannel Service Set This Service Set defines Services used to open a communication channel that...
#define UA_TYPES_REPUBLISHRESPONSE
UA_Boolean deleteBidirectional
UA_DateTime sourceTimestamp
size_t(* getJobs)(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout)
UA_DateTime nextChannelRenewal
#define UA_TYPES_MONITOREDITEMMODIFYREQUEST
UA_NodeId authenticationToken
#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG,...)
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_OUTPUTARGUMENTS
void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server)
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT
DeleteNodesRequest ^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_TYPES_READRESPONSE
#define UA_STATUSCODE_BADNOTSUPPORTED
ContentFilter ^^^^^^^^^^^^^.
UA_Variant * inputArguments
UA_Server * UA_Server_new(const UA_ServerConfig config)
#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG,...)
SetPublishingModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
status(* UA_decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type)
UA_MessageSecurityMode securityMode
#define UA_NODESTORE_TOMBSTONE
#define UA_STATUSCODE_BADNODEIDEXISTS
size_t userIdentityTokensSize
#define UA_TYPES_MONITOREDITEMCREATEREQUEST
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE
const UA_decodeBinarySignature decodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY
size_t notificationDataSize
UA_EndpointDescription * endpointDescriptions
UA_MonitoringParameters requestedParameters
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT
UA_StatusCode UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, const UA_UInt32 *newArrayDimensions, size_t newArrayDimensionsSize)
UA_ResponseHeader responseHeader
QueryDataSet ^^^^^^^^^^^^.
#define UA_TYPES_READREQUEST
void UA_NodeStore_iterate(UA_NodeStore *ns, UA_NodeStore_nodeVisitor visitor)
const UA_EXPORT UA_ClientConfig UA_ClientConfig_standard
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH
#define UA_STATUSCODE_BADOPERATIONABANDONED
void UA_SecureChannel_init(UA_SecureChannel *channel)
#define UA_TYPES_USERNAMEIDENTITYTOKEN
UA_StatusCode __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
#define SLIST_INSERT_HEAD(head, elm, field)
UA_ObjectLifecycleManagement lifecycleManagement
#define UA_TYPES_BROWSEREQUEST
#define UA_STATUSCODE_BADREFERENCELOCALONLY
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED
#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG
void Service_Call(UA_Server *server, UA_Session *session, const UA_CallRequest *request, UA_CallResponse *response)
void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm, UA_DateTime nowMonotonic)
UA_UInt32 requestedMaxReferencesPerNode
ReferenceTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^^ The attributes for a reference type node...
#define UA_STATUSCODE_BADTOOMANYOPERATIONS
DeleteNodesResponse ^^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED
UA_NodeClass targetNodeClass
UA_ExpandedNodeId typeDefinition
#define UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT
UA_Connection * connection
UA_ResponseHeader responseHeader
TranslateBrowsePathsToNodeIdsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more pa...
#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG,...)
size_t nodesToRegisterSize
UA_Connection UA_ClientConnectionTCP(UA_ConnectionConfig conf, const char *endpointUrl, UA_Logger logger)
UA_Node * UA_NodeStore_newNode(UA_NodeClass nodeClass)
Node Lifecycle ^^^^^^^^^^^^^^.
#define UA_NS0ID_DATATYPESFOLDER
UA_Boolean isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize)
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE
#define UA_TYPES_ADDNODESRESPONSE
void Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request, UA_UInt32 requestId)
UA_StatusCode UA_Variant_setRangeCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_NumericRange range)
#define UA_TYPES_PARSINGRESULT
#define UA_PRINTF_GUID_DATA(GUID)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE
void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm)
#define UA_ASSERT_RCU_UNLOCKED()
#define UA_SEC_TO_DATETIME
void(* UA_ServerCallback)(UA_Server *server, void *data)
UA_UInt32 maxResponseMessageSize
UA_StatusCode UA_Server_run_startup(UA_Server *server)
ViewDescription ^^^^^^^^^^^^^^^ The view to browse.
#define UA_NS0ID_REFERENCES
#define UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADREQUESTINTERRUPTED
void(* UA_NodeStore_nodeVisitor)(const UA_Node *node)
Iteration ^^^^^^^^^ The following definitions are used to call a callback for every node in the nodes...
#define UA_TYPES_STRING
String ^^^^^^.
uint32_t pcg32_random_r(pcg32_random_t *rng)
RepublishResponse ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_LOCALIZEDTEXT
CreateSubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
BrowseResponse ^^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address spa...
float UA_Float
Float ^^^^^ An IEEE single precision (32 bit) floating point value.
#define UA_NS0ID_HASMODELPARENT
UA_Boolean hasServerTimestamp
UA_NodeStoreEntry ** entries
#define UA_STATUSCODE_BADNOTFOUND
UA_ResponseHeader responseHeader
UA_LocalizedText description
UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_STATUSCODE_BADSERVERNAMEMISSING
#define UA_STATUSCODE_BADDATAUNAVAILABLE
void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseRequest *request, UA_BrowseResponse *response)
UA_Session * UA_SessionManager_getSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_XMLELEMENT
void __UA_Client_Service(UA_Client *client, const void *request, const UA_DataType *requestType, void *response, const UA_DataType *responseType)
UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst, const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_String UA_DateTime_toString(UA_DateTime t)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER
#define UA_NS0ID_SERVERDIAGNOSTICSTYPE
#define UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY
UA_UInt32 requestedLifetimeCount
void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem)
#define UA_TYPES_BROWSENEXTREQUEST
UA_Connection * connection
#define VERSION(MAJOR, MINOR, PATCH, LABEL)
void UA_Log_Stdout(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
UA_ResponseHeader responseHeader
UA_MessageSecurityMode securityMode
void UA_Connection_deleteMembers(UA_Connection *connection)
UA_StatusCode UA_EndpointUrl_split_ptr(const char *endpointUrl, char *hostname, const char **port, const char **path)
void Service_CreateSubscription(UA_Server *server, UA_Session *session, const UA_CreateSubscriptionRequest *request, UA_CreateSubscriptionResponse *response)
Subscription Service Set Subscriptions are used to report Notifications to the Client.
#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG,...)
Log Helper
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK
#define UA_STATUSCODE_BADSTRUCTUREMISSING
UA_StatusCode __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in, const UA_DataType *inDataType)
#define UA_NS0ID_HASEFFECT
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session, const UA_CreateMonitoredItemsRequest *request, UA_CreateMonitoredItemsResponse *response)
MonitoredItem Service Set Clients define MonitoredItems to subscribe to data and Events.
UA_DeleteReferencesItem * referencesToDelete
void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *request, UA_ReadResponse *response)
Query Service Set This Service Set is used to issue a Query to a Server.
#define UA_TYPES_WRITEVALUE
#define UA_SECURE_MESSAGE_HEADER_LENGTH
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE
ObjectTypeAttributes ^^^^^^^^^^^^^^^^^^^^ The attributes for an object type node. ...
UA_ExtensionObject userIdentityToken
UA_StatusCode UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
UA_Boolean UA_String_equal(const UA_String *s1, const UA_String *s2)
UserTokenPolicy ^^^^^^^^^^^^^^^ Describes a user token that can be used with a server.
UA_ResponseHeader responseHeader
UA_Boolean hasInnerDiagnosticInfo
#define UA_STATUSCODE_BADENTRYEXISTS
#define CHECK_DATATYPE_SCALAR(EXP_DT)
#define UA_STATUSCODE_BADVIEWVERSIONINVALID
struct UA_DelayedJob UA_DelayedJob
#define UA_NS0ID_HASSUBTYPE
UA_BrowseResultMask
BrowseResultMask ^^^^^^^^^^^^^^^^ A bit mask which specifies what should be returned in a browse resp...
#define UA_TYPES_USERTOKENTYPE
UA_RequestHeader requestHeader
#define UA_TYPES_ADDREFERENCESRESPONSE
UA_UInt32 revisedMaxKeepAliveCount
void(* deleteMembers)(UA_ServerNetworkLayer *nl)
Deletes the network content.
UA_StatusCode UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, UA_UInt32 **outArrayDimensions, size_t *outArrayDimensionsSize)
UA_ValueSource
VariableNode
#define UA_TYPES_CLOSESESSIONREQUEST
#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE
UA_UInt32 protocolVersion
UA_ResponseHeader responseHeader
void Service_Call_single(UA_Server *server, UA_Session *session, const UA_CallMethodRequest *request, UA_CallMethodResult *result)
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
#define UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY
void * UA_new(const UA_DataType *type)
The following functions are used for generic handling of data types.
UA_UInt32 requestedMaxKeepAliveCount
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN
#define UA_STATUSCODE_BADSERVERURIINVALID
#define UA_NS0ID_DATAVALUE
FindServersResponse ^^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
UA_StatusCode UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
#define UA_STATUSCODE_BADNODENOTINVIEW
UA_StatusCode __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_InstantiationCallback *instantiationCallback, UA_NodeId *outNewNodeId)
size_t outputArgumentsSize
CloseSessionResponse ^^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_TYPES_FINDSERVERSREQUEST
UA_StatusCode UA_Server_run(UA_Server *server, volatile UA_Boolean *running)
#define MANUFACTURER_NAME
UA_UInt32 maxResponseMessageSize
UA_DateTime serverTimestamp
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
UA_String UA_XmlElement
XmlElement ^^^^^^^^^^ An XML element.
NodeAttributes ^^^^^^^^^^^^^^ The base attributes for all nodes.
NotificationMessage ^^^^^^^^^^^^^^^^^^^.
UA_ExpandedNodeId parentNodeId
#define UA_TYPES_REPUBLISHREQUEST
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID
UA_NodeId referenceTypeId
#define UA_USEC_TO_DATETIME
#define UA_NS0ID_PROPERTYTYPE
UA_UInt16 availableContinuationPoints
void Service_CloseSession(UA_Server *server, UA_Session *session, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response)
#define UA_TYPES_BROWSEPATHRESULT
#define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER
#define UA_NS0ID_HASTYPEDEFINITION
#define UA_MINMESSAGESIZE
#define UA_PRINTF_STRING_DATA(STRING)
#define UA_NS0ID_HIERARCHICALREFERENCES
UA_UInt32 revisedLifetimeCount
UA_BrowsePathTarget * targets
Networking Client-server connection is represented by a UA_Connection structure.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO
#define UA_NS0ID_TYPESFOLDER
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG
UA_UInt32 * monitoredItemIds
UA_WriteValue * nodesToWrite
#define UA_TYPES_DELETENODESITEM
UA_DataValue UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Reading and Writing Node Attributes The functions for reading and writing node attributes call the re...
#define UA_STATUSCODE_BADTOOMANYARGUMENTS
#define UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
DataChangeFilter ^^^^^^^^^^^^^^^^.
UA_MonitoredItemCreateRequest * itemsToCreate
#define UA_STATUSCODE_BADBOUNDNOTFOUND
MethodAttributes ^^^^^^^^^^^^^^^^ The attributes for a method node.
UnregisterNodesRequest ^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
#define UA_NS0ID_BYTESTRING
#define UA_STATUSCODE_BADNOCOMMUNICATION
#define UA_TYPES_SERVERSTATUSDATATYPE
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID
#define UA_TYPES_DATACHANGENOTIFICATION
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT
#define UA_STRING_STATIC_NULL
#define UA_STATUSCODE_BADINVALIDARGUMENT
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session, const UA_SetMonitoringModeRequest *request, UA_SetMonitoringModeResponse *response)
void Service_FindServers(UA_Server *server, UA_Session *session, const UA_FindServersRequest *request, UA_FindServersResponse *response)
Discovery Service Set This Service Set defines Services used to discover the Endpoints implemented by...
#define UA_STATUSCODE_GOODPOSTACTIONFAILED
#define UA_STATUSCODE_UNCERTAINSUBNORMAL
UA_StatusCode(* start)(UA_ServerNetworkLayer *nl, UA_Logger logger)
#define UA_fd_isset(fd, fds)
UA_NumericRangeDimension * dimensions
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT
const UA_calcSizeBinarySignature calcSizeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NODESTORE_MINSIZE
#define UA_STATUSCODE_BADOBJECTDELETED
UA_Boolean hasNamespaceUri
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID
union UA_ExtensionObject::@1 content
UA_ApplicationDescription server
#define UA_STATUSCODE_GOODSHUTDOWNEVENT
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE
#define UA_STATUSCODE_BADSECURITYMODEREJECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON
UA_Boolean deleteTargetReferences
#define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER
UA_UInt32 protocolVersion
TcpHelloMessage ^^^^^^^^^^^^^^^ Hello Message.
#define UA_STATUSCODE_BADNODECLASSINVALID
UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID)
ChannelSecurityToken ^^^^^^^^^^^^^^^^^^^^ The token that identifies a set of keys for an active secur...
UA_Client_Authentication authenticationMethod
#define UA_TYPES_NODEATTRIBUTES
#define UA_TYPES_MODIFYMONITOREDITEMSRESPONSE
#define UA_TYPES_DEADBANDTYPE
Server Configuration The following structure is passed to a new server for configuration.
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_STATUSCODE_BADCERTIFICATEREVOKED
#define UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADNOMATCH
#define UA_STATUSCODE_GOODEDITED
UA_AttributeId
Standard-Defined Constants This section contains numerical and string constants that are defined in t...
#define TAILQ_FIRST(head)
#define UA_TYPES_CALLREQUEST
ViewAttributes ^^^^^^^^^^^^^^ The attributes for a view node.
#define UA_ASSERT_RCU_LOCKED()
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME
enum UA_NodeIdType identifierType
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING
#define UA_STATUSCODE_BADDISCOVERYURLMISSING
UA_BrowseDescription * nodesToBrowse
#define UA_NS0ID_MODELLINGRULE_MANDATORY
DeleteNodesItem ^^^^^^^^^^^^^^^ A request to delete a node to the server address space.
#define UA_NodeStore_newDataTypeNode()
UA_CallMethodRequest * methodsToCall
struct UA_NodeStoreEntry UA_NodeStoreEntry
UA_MessageSecurityMode securityMode
#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG,...)
UA_MonitoredItemModifyRequest * itemsToModify
int16_t UA_Int16
Int16 ^^^^^ An integer value between -32 768 and 32 767.
UA_StatusCode UA_EndpointUrl_split(const char *endpointUrl, char *hostname, UA_UInt16 *port, const char **path)
EndpointURL Helper ^^^^^^^^^^^^^^^^^^.
UA_Boolean includeSubtypes
#define MAXTIMEOUT
There are four types of job execution:
#define UA_TRANSPORT_CHUNKTYPE
UA_StatusCode UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
#define UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel)
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Boolean isAbstract
QueryDataDescription ^^^^^^^^^^^^^^^^^^^^.
#define UA_OPEN62541_VER_MINOR
UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server)
UA_UInt32 receiveBufferSize
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_ResponseHeader responseHeader
#define UA_TYPES_BYTE
Byte ^^^^.
UA_LocalizedText displayName
BrowseNextResponse ^^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
#define UA_NS0ID_BASEOBJECTTYPE
DeleteReferencesItem ^^^^^^^^^^^^^^^^^^^^ A request to delete a node from the server address space...
int32_t UA_Int32
Int32 ^^^^^ An integer value between -2 147 483 648 and 2 147 483 647.
void UA_Session_updateLifetime(UA_Session *session)
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED
MonitoredItemCreateResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADSECURECHANNELCLOSED
UA_ConnectionConfig localConf
UA_DateTime UA_DateTime_nowMonotonic(void)
UA_String encryptionAlgorithm
UA_ExpandedNodeId targetId
const UA_String UA_STRING_NULL
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE
UA_ByteString * continuationPoints
UA_UInt32 UA_UInt32_random(void)
#define UA_TYPES_MONITORINGPARAMETERS
ExpandedNodeId ^^^^^^^^^^^^^^ A NodeId that allows the namespace URI to be specified instead of an in...
ParsingResult ^^^^^^^^^^^^^.
UA_UInt16 addNamespace(UA_Server *server, const UA_String name)
#define UA_PRINTF_GUID_FORMAT
Convenience macros for complex types ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
CallMethodRequest ^^^^^^^^^^^^^^^^^.
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session, const UA_DeleteSubscriptionsRequest *request, UA_DeleteSubscriptionsResponse *response)
UA_UInt32 maxNotificationsPerPublish
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN
#define UA_realloc(ptr, size)
UA_RequestHeader requestHeader
#define UA_NS0ID_STATUSCODE
UA_ExpandedNodeId targetNodeId
UA_ByteString serverCertificate
ActivateSessionResponse ^^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
VariableAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a variable node.
#define UA_STATUSCODE_BADSERVERINDEXINVALID
UA_IdType
IdType ^^^^^^ The type of identifier used in a node id.
UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber)
void UA_random_seed(UA_UInt64 seed)
Random Number Generator If UA_ENABLE_MULTITHREADING is defined, then the seed is stored in thread loc...
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADREQUESTTYPEINVALID
#define UA_TYPES_SERVICEFAULT
#define UA_TYPES_APPLICATIONTYPE
UA_StatusCode UA_NodeStore_replace(UA_NodeStore *ns, UA_Node *node)
UA_Boolean deleteSubscriptions
const char * LogLevelNames[6]
UA_ChunkType
ChunkType ^^^^^^^^^ Type of the chunk.
UA_UInt16 serverPicoseconds
UA_ApplicationDescription clientDescription
WriteResponse ^^^^^^^^^^^^^.
SubscriptionAcknowledgement ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Server_delete(UA_Server *server)
UA_Double minimumSamplingInterval
UA_StatusCode UA_Variant_setArrayCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADSYNTAXERROR
#define UA_TYPES_MONITOREDITEMNOTIFICATION
#define UA_STATUSCODE_BADREFERENCENOTALLOWED
UA_CallMethodResult * results
#define UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME
UserIdentityToken ^^^^^^^^^^^^^^^^^ A base type for a user identity token.
UA_StatusCode(* send)(UA_Connection *connection, UA_ByteString *buf)
UA_StatusCode UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_String targetServerUri, const UA_ExpandedNodeId targetNodeId, UA_NodeClass targetNodeClass)
#define UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_DATACHANGETRIGGER
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID
QueryNextResponse ^^^^^^^^^^^^^^^^^.
UA_NodeAttributesMask
NodeAttributesMask ^^^^^^^^^^^^^^^^^^ The bits used to specify default attributes for a new node...
#define UA_TYPES_VARIABLEATTRIBUTES
UA_BrowsePath * browsePaths
#define UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_Boolean releaseContinuationPoints
#define UA_TYPES_CALLMETHODREQUEST
#define UA_NODEIDTYPE_NUMERIC_FOURBYTE
#define UA_STATUSCODE_BADOUTOFMEMORY
UA_LocalizedText inverseName
UA_Double revisedSamplingInterval
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED
#define UA_NodeStore_newObjectNode()
#define UA_TYPES_CHANNELSECURITYTOKEN
UA_MethodCallback attachedMethod
#define UA_TYPES_BOOLEAN
Boolean ^^^^^^^.
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY
#define SIMPLEQ_REMOVE_HEAD(head, field)
size_t arrayDimensionsSize
#define UA_NS0ID_SERVER_SERVERARRAY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED
UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemID)
#define UA_TYPES_BROWSEDESCRIPTION
#define UA_TYPES_CONTENTFILTERELEMENTRESULT
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED
#define UA_TYPES_REFERENCENODE
#define UA_NODEIDTYPE_NUMERIC_COMPLETE
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN
void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server)
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED
UA_UInt32 maxNotificationsPerPublish
Guid ^^^^ A 16 byte value that can be used as a globally unique identifier.
UA_MessageSecurityMode
MessageSecurityMode ^^^^^^^^^^^^^^^^^^^ The type of security to use on a message. ...
UA_StatusCode UA_Node_copyAnyNodeClass(const UA_Node *src, UA_Node *dst)
String ^^^^^^ A sequence of Unicode characters.
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE
const UA_Node * UA_NodeStore_get(UA_NodeStore *ns, const UA_NodeId *nodeid)
MonitoringParameters ^^^^^^^^^^^^^^^^^^^^.
#define SIMPLEQ_HEAD(name, type)
UA_DeadbandType
DeadbandType ^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
#define UA_TYPES_MONITOREDITEMMODIFYRESULT
UA_UInt32 monitoredItemId
#define UA_assert(ignore)
#define UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY
#define SIMPLEQ_INIT(head)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER
void UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel)
size_t inputArgumentsSize
UA_StatusCode UA_Server_setObjectTypeNode_lifecycleManagement(UA_Server *server, UA_NodeId nodeId, UA_ObjectLifecycleManagement olm)
UA_NodeId authenticationToken
#define UA_TYPES_VIEWATTRIBUTES
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS
UA_RequestHeader requestHeader
size_t(* stop)(UA_ServerNetworkLayer *nl, UA_Job **jobs)
UA_UInt32 receiveSequenceNumber
#define UA_STATUSCODE_BADNODELETERIGHTS
#define UA_STATUSCODE_BADPARENTNODEIDINVALID
DeleteMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE
UA_StatusCode UA_Connection_completeMessages(UA_Connection *connection, UA_ByteString *message, UA_Boolean *realloced)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_AGGREGATEFUNCTIONS
#define UA_STATUSCODE_BADNONCEINVALID
UA_Boolean UA_NodeId_isNull(const UA_NodeId *p)
void UA_Node_deleteMembersAnyNodeClass(UA_Node *node)
#define UA_TYPES_LOCALIZEDTEXT
LocalizedText ^^^^^^^^^^^^^.
AddReferencesResponse ^^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
const UA_EXPORT UA_ServerConfig UA_ServerConfig_standard
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
UA_Boolean userExecutable
UA_Double requestedPublishingInterval
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST
UA_ConnectionConfig remoteConf
UA_BrowseResult UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
const UA_Node * getNodeType(UA_Server *server, const UA_Node *node)
#define UA_TYPES_RESPONSEHEADER
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED
#define UA_NODE_VARIABLEATTRIBUTES
#define UA_STATUSCODE_BADSESSIONCLOSED
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOOD
#define UA_STATUSCODE_BADNOTTYPEDEFINITION
#define UA_STATUSCODE_BADNOTHINGTODO
#define UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_GOODCLAMPED
size_t referencesToAddSize
UA_EXPORT const UA_DataType UA_TRANSPORT[UA_TRANSPORT_COUNT]
struct UA_SecureChannelManager UA_SecureChannelManager
UA_ExpandedNodeId requestedNewNodeId
#define UA_STATUSCODE_BADNOTREADABLE
UA_StatusCode UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type)
void UA_SecureChannel_detachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_TYPES_UNREGISTERNODESRESPONSE
void Service_ModifySubscription(UA_Server *server, UA_Session *session, const UA_ModifySubscriptionRequest *request, UA_ModifySubscriptionResponse *response)
UA_UInt32 requestedLifetimeCount
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS
UA_StatusCode typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId, UA_Int32 targetValueRank, size_t targetArrayDimensionsSize, const UA_UInt32 *targetArrayDimensions, const UA_Variant *value, const UA_NumericRange *range, UA_Variant *editableValue)
#define UA_NS0ID_ROOTFOLDER
UA_ResponseHeader responseHeader
UA_StatusCode UA_Client_getEndpoints(UA_Client *client, const char *serverUrl, size_t *endpointDescriptionsSize, UA_EndpointDescription **endpointDescriptions)
int8_t UA_SByte
SByte ^^^^^ An integer value between -128 and 127.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY
UA_Boolean UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2)
#define UA_TYPES_FILTEROPERATOR
#define UA_TYPES_CLOSESECURECHANNELREQUEST
#define UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY
CloseSessionRequest ^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID
ReadResponse ^^^^^^^^^^^^.
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED
UA_BrowseDirection
BrowseDirection ^^^^^^^^^^^^^^^ The directions of the references to return.
#define UA_NS0ID_DATETIME
WriteRequest ^^^^^^^^^^^^.
const UA_StatusCodeDescription * UA_StatusCode_description(UA_StatusCode code)
UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_TYPES_VIEWDESCRIPTION
void UA_NodeStore_delete(UA_NodeStore *ns)
#define UA_TYPES_QUERYFIRSTREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS
#define UA_NS0ID_STRUCTURE
UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range)
#define UA_STATUSCODE_BADUSERACCESSDENIED
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE
#define UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank, UA_Int32 constraintValueRank)
void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesRequest *request, UA_AddNodesResponse *response)
NodeManagement Service Set This Service Set defines Services to add and delete AddressSpace Nodes and...
UA_StatusCode __UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_NodeId *outNewNodeId)
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED
ActivateSessionRequest ^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
#define UA_STATUSCODE_BADCONNECTIONCLOSED
UA_SecureChannel * channel
UA_StatusCode UA_SecureChannel_sendBinaryMessage(UA_SecureChannel *channel, UA_UInt32 requestId, const void *content, const UA_DataType *contentType)
#define UA_STATUSCODE_GOODENTRYINSERTED
#define UA_STATUSCODE_BADCOMMUNICATIONERROR
#define UA_TYPES_STATUSCODE
StatusCode ^^^^^^^^^^.
void UA_SessionManager_deleteMembers(UA_SessionManager *sm)
size_t(* UA_calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype)
#define UA_TYPES_BROWSEDIRECTION
CloseSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_STATUSCODE_BADREQUESTHEADERINVALID
#define UA_TYPES_REGISTERNODESREQUEST
#define UA_TYPES_EXTENSIONOBJECT
ExtensionObject ^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES
#define UA_TYPES_UNREGISTERNODESREQUEST
#define PCG32_INITIALIZER
UA_SessionManager sessionManager
UA_ResponseHeader responseHeader
UA_UInt32 requestedMaxKeepAliveCount
SetMonitoringModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_UInt32 revisedQueueSize
#define UA_TYPES_BROWSERESULT
ServerStatusDataType ^^^^^^^^^^^^^^^^^^^^.
UA_ByteString serverNonce
void(* releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_Connection * closeConnection
#define LIST_FOREACH_SAFE(var, head, field, tvar)
void Service_DeleteReferences(UA_Server *server, UA_Session *session, const UA_DeleteReferencesRequest *request, UA_DeleteReferencesResponse *response)
UA_UInt32 UA_NodeId_hash(const UA_NodeId *n)
void Service_GetEndpoints(UA_Server *server, UA_Session *session, const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response)
UA_NodeId referenceTypeId
UA_StatusCode UA_Variant_setRange(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_NumericRange range)
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT
UA_Double revisedSamplingInterval
BrowsePath ^^^^^^^^^^ A request to translate a path into a node id.
#define UA_TYPES_QUERYNEXTRESPONSE
DeleteSubscriptionsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
RelativePathElement ^^^^^^^^^^^^^^^^^^^ An element in a relative path.
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED
UA_LocalizedText displayName
UA_NotificationMessage notificationMessage
UA_FilterOperator
FilterOperator ^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED
#define UA_TYPES_MONITOREDITEMCREATERESULT
#define UA_calloc(num, size)
uint8_t UA_Byte
Byte ^^^^ An integer value between 0 and 255.
BrowseResult ^^^^^^^^^^^^ The result of a browse operation.
UA_DateTimeStruct UA_DateTime_toStruct(UA_DateTime t)
void UA_Session_init(UA_Session *session)
#define UA_STATUSCODE_BADMETHODINVALID
#define UA_STATUSCODE_BADSENSORFAILURE
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN
void UA_SecureChannel_deleteMembersCleanup(UA_SecureChannel *channel)
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH
#define UA_NS0ID_HASNOTIFIER
#define UA_TYPES_DELETEREFERENCESREQUEST
UA_QualifiedName dataEncoding
UA_UInt32 * subscriptionIds
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED
VariableTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^ The attributes for a variable type node.
UA_Boolean hasInnerStatusCode
#define UA_TYPES_NOTIFICATIONMESSAGE
#define UA_TYPES_TIMESTAMPSTORETURN
UA_ReferenceDescription * references
#define UA_STATUSCODE_BADNOSUBSCRIPTION
UA_StatusCode(* getSendBuffer)(UA_Connection *connection, size_t length, UA_ByteString *buf)
CloseSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_TYPES_SECURITYTOKENREQUESTTYPE
UA_AddNodesResult * results
#define UA_STATUSCODE_BADUNEXPECTEDERROR
#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST
#define UA_STATUSCODE_BADWRITENOTSUPPORTED
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SOFTWARECERTIFICATES
UA_Boolean hasAdditionalInfo
UA_ByteString clientNonce
#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG
#define UA_NS0ID_BUILDINFOTYPE
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADWAITINGFORRESPONSE
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
#define UA_TYPES_ANONYMOUSIDENTITYTOKEN
void UA_delete(void *p, const UA_DataType *type)
UA_ServerState
ServerState ^^^^^^^^^^^.
UA_UInt32 * availableSequenceNumbers
#define UA_STATUSCODE_BADUNKNOWNRESPONSE
void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_NodeId *sessionToken)
GetEndpointsRequest ^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response)
#define UA_NS0ID_HASHISTORICALCONFIGURATION
UA_StatusCode(* UA_copySignature)(const void *src, void *dst, const UA_DataType *type)
void pcg32_srandom_r(pcg32_random_t *rng, uint64_t initial_state, uint64_t initseq)
UA_ExpandedNodeId targetNodeId
UA_Boolean hasServerPicoseconds
#define UA_TYPES_RELATIVEPATHELEMENT
UA_ExtensionObject * notificationData
AddNodesResult ^^^^^^^^^^^^^^ A result of an add node operation.
#define UA_TYPES_DOUBLE
Double ^^^^^^.
#define LIST_INSERT_AFTER(listelm, elm, field)
void(* releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_String securityPolicyUri
UA_ServerNetworkLayer UA_ServerNetworkLayerTCP(UA_ConnectionConfig conf, UA_UInt16 port)
#define UA_STATUSCODE_BADCONTENTFILTERINVALID
CreateSessionResponse ^^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
const UA_ByteString UA_BYTESTRING_NULL
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED
#define UA_TYPES_BROWSENEXTRESPONSE
UA_NodeClass
NodeClass ^^^^^^^^^ A mask specifying the class of the node.
UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
UA_UInt32 remainingPathIndex
UA_StatusCode UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, const UA_NumericRange range)
#define UA_TYPES_INT64
Int64 ^^^^^.
#define UA_NS0ID_AGGREGATES
#define UA_STATUSCODE_BADSOURCENODEIDINVALID
UA_TimestampsToReturn
TimestampsToReturn ^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_EVENTTYPESFOLDER
UA_StatusCode UA_Server_addRepeatedJob(UA_Server *server, UA_Job job, UA_UInt32 interval, UA_Guid *jobId)
Repeated jobs
RegisterNodesRequest ^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a sessi...
size_t nodesToUnregisterSize
EndpointDescription ^^^^^^^^^^^^^^^^^^^ The description of a endpoint that can be used to access a se...
#define UA_BINARY_OVERLAYABLE_FLOAT
Float Endianness ^^^^^^^^^^^^^^^^ The definition UA_BINARY_OVERLAYABLE_FLOAT is true when the floatin...
UA_LocalizedText description
ObjectAttributes ^^^^^^^^^^^^^^^^ The attributes for an object node.
#define UA_NS0ID_SERVER_SERVICELEVEL
#define UA_TYPES_QUERYNEXTREQUEST
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY
#define UA_TYPES_ACTIVATESESSIONRESPONSE
#define UA_TYPES_REQUESTHEADER
UA_DataTypeMember * members
UA_ResponseHeader responseHeader
#define UA_TYPES_UINT16
UInt16 ^^^^^^.
UA_SecureChannel * channel
UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *type, UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle, UA_ByteString *dst, size_t *offset) UA_FUNC_ATTR_WARN_UNUSED_RESULT
#define UA_TYPES_VARIANT
Variant ^^^^^^^.
void UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm, UA_DateTime nowMonotonic)
UA_UInt32 receiveBufferSize
UA_TimestampsToReturn timestampsToReturn
DeleteReferencesResponse ^^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server addre...
#define UA_TYPES_NODECLASS
#define UA_STATUSCODE_GOODOVERLOAD
void(* close)(UA_Connection *connection)
UA_NODE_BASEATTRIBUTES UA_Boolean executable
void UA_Variant_setArray(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response)
Session Service Set This Service Set defines Services for an application layer connection establishme...
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY
size_t availableSequenceNumbersSize
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID
#define UA_fd_set(fd, fds)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES
struct UA_NotificationMessageEntry UA_NotificationMessageEntry
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID
#define UA_STRING_STATIC(s)
#define TAILQ_FOREACH_SAFE(var, head, field, tvar)
#define UA_STATUSCODE_GOODLOCALOVERRIDE
#define SLIST_HEAD(name, type)
#define UA_TYPES_SERVERSTATE
#define LIST_INSERT_HEAD(head, elm, field)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY
MonitoredItemCreateRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
void(* UA_Logger)(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
The signature of the logger.
ModifyMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_SecurityTokenRequestType
SecurityTokenRequestType ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a token if being created or renew...
#define UA_NS0ID_HASEVENTSOURCE
UA_UInt32 * monitoredItemIds
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED
UA_STATIC_ASSERT(sizeof(UA_MessageType)==sizeof(UA_Int32), enum_must_be_32bit)
#define UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADINVALIDSTATE
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED
#define UA_NS0ID_DIAGNOSTICINFO
#define UA_NS0ID_SERVER_GETMONITOREDITEMS
#define UA_STATUSCODE_BADFILTERLITERALINVALID
#define UA_STATUSCODE_BADARGUMENTSMISSING
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE
#define UA_STATUSCODE_BADNODATAAVAILABLE
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED
UA_StatusCode Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_NodeId *typeDefinition, UA_InstantiationCallback *instantiationCallback, UA_NodeId *addedNodeId)
UA_NodeId referenceTypeId
UA_UInt32 * arrayDimensions
#define UA_TYPES_OBJECTTYPEATTRIBUTES
UA_StatusCode UA_Array_copy(const void *src, size_t size, void **dst, const UA_DataType *type)
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID
UA_Double samplingInterval
UA_MonitoringMode monitoringMode
#define UA_TYPES_CREATESESSIONREQUEST
ContentFilterElementResult ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_BROWSEPATHTARGET
#define UA_TYPES_NODETYPEDESCRIPTION
#define UA_DATETIME_UNIX_EPOCH
#define UA_STATUSCODE_BADINVALIDTIMESTAMP
#define LIST_FOREACH(var, head, field)
void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest *request, UA_WriteResponse *response)
#define UA_TYPES_OBJECTATTRIBUTES
BrowseDescription ^^^^^^^^^^^^^^^^^ A request to browse the the references from a node...
#define UA_NS0ID_BASEVARIABLETYPE
#define UA_NodeStore_newMethodNode()
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID
#define UA_NS0ID_MODELLINGRULETYPE
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN
#define UA_NS0ID_SERVERSTATUSTYPE
UA_StatusCode UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId, UA_Boolean deleteTargetReferences)
#define UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY
#define UA_NS0ID_EXPANDEDNODEID
struct session_list_entry session_list_entry
#define UA_RESTRICT
Non-aliasing pointers
#define UA_STATUSCODE_BADFILTEROPERATORINVALID
#define UA_TYPES_QUERYDATADESCRIPTION
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session, const UA_ModifyMonitoredItemsRequest *request, UA_ModifyMonitoredItemsResponse *response)
int __secs_to_tm(long long t, struct tm *tm)
UA_StatusCode UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
size_t referencesToDeleteSize
#define UA_STATUSCODE_BADCONFIGURATIONERROR
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS
UA_UInt32 revisedMaxKeepAliveCount
status(* UA_encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type)
void Service_RegisterNodes(UA_Server *server, UA_Session *session, const UA_RegisterNodesRequest *request, UA_RegisterNodesResponse *response)
UA_UInt16 binaryEncodingId
size_t arrayDimensionsSize
UA_Boolean userExecutable
UA_SubscriptionAcknowledgement * subscriptionAcknowledgements
void Service_Republish(UA_Server *server, UA_Session *session, const UA_RepublishRequest *request, UA_RepublishResponse *response)
UA_String targetServerUri
UA_UInt32 requestedLifetime
UA_BrowseResult * results
#define UA_NS0ID_MODELLINGRULE_OPTIONAL
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_HASCHILD
union UA_NodeId::@0 identifier
UA_ByteString clientNonce
#define UA_NS0ID_OBJECTTYPESFOLDER
#define UA_TYPES_DATETIME
DateTime ^^^^^^^^.
UA_ReadValueId itemToMonitor
UA_ResponseHeader responseHeader
UA_Client * UA_Client_new(UA_ClientConfig config)
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN
UA_UsernamePasswordLogin usernamePasswords[2]
#define UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_SETPUBLISHINGMODERESPONSE
#define UA_TYPES_MONITORINGMODE
#define UA_TYPES_REFERENCEDESCRIPTION
#define UA_TYPES_ADDREFERENCESREQUEST
UA_DataChangeTrigger
DataChangeTrigger ^^^^^^^^^^^^^^^^^.
#define UA_TYPES_VARIABLETYPEATTRIBUTES
size_t serverEndpointsSize
QueryFirstResponse ^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_APPLICATIONDESCRIPTION
size_t monitoredItemIdsSize
UA_ReadValueId * nodesToRead
UA_MonitoringMode monitoringMode
struct UA_SessionManager UA_SessionManager
UA_ExpandedNodeId targetId
RepublishRequest ^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES
#define UA_TYPES_USERTOKENPOLICY
UA_NotificationMessage notificationMessage
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED
#define UA_STATUSCODE_BADFILTERNOTALLOWED
UA_RequestHeader requestHeader
DataChangeNotification ^^^^^^^^^^^^^^^^^^^^^^.
const char * LogCategoryNames[6]
UA_UInt32 sendSequenceNumber
const UA_DataType UA_TYPES[UA_TYPES_COUNT]
#define UA_TYPES_XMLELEMENT
XmlElement ^^^^^^^^^^.
UA_NodeId * nodesToRegister
#define UA_STRING_ALLOC(CHARS)
#define UA_TYPES_DIAGNOSTICINFO
DiagnosticInfo ^^^^^^^^^^^^^^.
#define UA_TYPES_CREATEMONITOREDITEMSREQUEST
#define UA_TYPES_DELETEMONITOREDITEMSRESPONSE
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA
void Service_Browse_single(UA_Server *server, UA_Session *session, struct ContinuationPointEntry *cp, const UA_BrowseDescription *descr, UA_UInt32 maxrefs, UA_BrowseResult *result)
size_t monitoredItemsSize
UA_UInt32 monitoredItemId
#define UA_EMPTY_ARRAY_SENTINEL
PublishResponse ^^^^^^^^^^^^^^^.
UA_RelativePath relativePath
UA_StatusCode __UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *out, const UA_DataType *outDataType)
#define UA_TYPES_CREATEMONITOREDITEMSRESPONSE
UA_NodeId * registeredNodeIds
UA_UserTokenType
UserTokenType ^^^^^^^^^^^^^ The possible user token types.
UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *type)
UA_LocalizedText displayName
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data)
#define UA_malloc(_p_size)
UA_Variant * outputArguments
void UA_deleteMembers(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID
UA_UserTokenPolicy * userIdentityTokens
#define UA_STATUSCODE_BADNODATA
BrowseRequest ^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address space...
UA_StatusCode UA_Connection_receiveChunksBlocking(UA_Connection *connection, UA_ByteString *chunks, UA_Boolean *realloced, UA_UInt32 timeout)
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE
UA_StatusCode UA_Server_write(UA_Server *server, const UA_WriteValue *value)
The following node attributes cannot be changed once a node has been created:
#define UA_STATUSCODE_BADFILTEROPERANDINVALID
size_t monitoredItemIdsSize
#define UA_TRANSPORT_TCPMESSAGEHEADER
#define UA_MAXCONTINUATIONPOINTS
NodeTypeDescription ^^^^^^^^^^^^^^^^^^^.
struct UA_DiagnosticInfo UA_DiagnosticInfo
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_REGISTERNODESRESPONSE
#define UA_TYPES_DELETENODESREQUEST
#define UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_UInt32 revisedQueueSize
UA_Double requestedSessionTimeout
UA_ResponseHeader responseHeader
#define UA_TYPES_CALLRESPONSE
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID
#define TAILQ_INSERT_TAIL(head, elm, field)
BrowsePathResult ^^^^^^^^^^^^^^^^ The result of a translate opearation.
#define UA_BUILTIN_TYPES_COUNT
#define UA_STATUSCODE_BADREQUESTTOOLARGE
struct pcg_state_setseq_64 pcg32_random_t
#define UA_TYPES_ENDPOINTDESCRIPTION
OpenSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
#define UA_OPEN62541_VER_PATCH
#define UA_TYPES_NODEATTRIBUTESMASK
#define UA_NS0ID_FOLDERTYPE
#define UA_STATUSCODE_BADNOTWRITABLE
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_Double minimumSamplingInterval
UA_BrowseResult * results
AddReferencesRequest ^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
#define UA_TYPES_QUERYFIRSTRESPONSE
#define UA_STATUSCODE_BADREQUESTNOTALLOWED
#define UA_STATUSCODE_BADDECODINGERROR
#define UA_MSEC_TO_DATETIME
void UA_SecureChannel_attachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_STATUSCODE_BADMAXAGEINVALID
UA_RequestHeader requestHeader
#define UA_TYPES_CONTENTFILTERELEMENT
#define TAILQ_HEAD(name, type)
#define UA_STATUSCODE_BADNOENTRYEXISTS
UA_MessageType
MessageType ^^^^^^^^^^^ Message Type and whether the message contains an intermediate chunk...
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED
UA_Boolean moreNotifications
#define UA_STATUSCODE_BADMONITORINGMODEINVALID
#define UA_TYPES_SETMONITORINGMODEREQUEST
#define UA_TYPES_NODEID
NodeId ^^^^^^.
UA_StatusCode UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length)
size_t endpointDescriptionsSize
ModifySubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
UnregisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
struct UA_Job::@5::@7 methodCall
PublishRequest ^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_NAMESPACEARRAY
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_INPUTARGUMENTS
UA_AsymmetricAlgorithmSecurityHeader serverAsymAlgSettings
MonitoredItemModifyRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED
#define SIMPLEQ_INSERT_TAIL(head, elm, field)
#define UA_STATUSCODE_BADEVENTIDUNKNOWN
int64_t UA_Int64
Int64 ^^^^^ An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807...
#define UA_TYPES_CREATESUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADNODEIDREJECTED
#define UA_TYPES_EXPANDEDNODEID
ExpandedNodeId ^^^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
CreateMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_CONTENTFILTERRESULT
#define UA_TYPES_DATATYPEATTRIBUTES
void Service_BrowseNext(UA_Server *server, UA_Session *session, const UA_BrowseNextRequest *request, UA_BrowseNextResponse *response)
UA_NodeId referenceTypeId
#define LIST_REMOVE(elm, field)
#define UA_TYPES_BROWSERESULTMASK
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS
#define UA_TRANSPORT_TCPERRORMESSAGE
void Service_SetPublishingMode(UA_Server *server, UA_Session *session, const UA_SetPublishingModeRequest *request, UA_SetPublishingModeResponse *response)
#define UA_TYPES_ADDNODESRESULT
#define UA_PRINTF_STRING_FORMAT
MonitoredItemNotification ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADNODEIDINVALID
BrowsePathTarget ^^^^^^^^^^^^^^^^ The target of the translated path.
const UA_VariableTypeNode * getVariableNodeType(UA_Server *server, const UA_VariableNode *node)
#define UA_NS0ID_SERVERSTATE
ModifySubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED
ModifyMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Connection_detachSecureChannel(UA_Connection *connection)
#define UA_STATUSCODE_BADSHUTDOWN
#define CHECK_ATTRIBUTES(TYPE)
UA_LocalizedText description
AnonymousIdentityToken ^^^^^^^^^^^^^^^^^^^^^^ A token representing an anonymous user.
#define UA_TYPES_OPENSECURECHANNELRESPONSE
UA_StatusCode(* UA_EditNodeCallback)(UA_Server *, UA_Session *, UA_Node *, const void *)
UA_StatusCode UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server)
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED
#define UA_NODE_BASEATTRIBUTES
#define UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_COUNT
Every type is assigned an index in an array containing the type descriptions.
LocalizedText ^^^^^^^^^^^^^ Human readable text with an optional locale identifier.
UA_Boolean hasSourceTimestamp
UA_UInt32 revisedLifetimeCount
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID
#define UA_TYPES_BUILDINFO
#define UA_TYPES_GETENDPOINTSRESPONSE
UA_ChannelSecurityToken nextSecurityToken
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE
void UA_MoniteredItem_SampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
UA_RequestHeader requestHeader
ContentFilterElement ^^^^^^^^^^^^^^^^^^^^.
#define UA_TRANSPORT_SEQUENCEHEADER
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED
#define UA_STATUSCODE_BADENDOFSTREAM
UA_StatusCode UA_Server_removeRepeatedJob(UA_Server *server, UA_Guid jobId)
#define UA_TYPES_QUALIFIEDNAME
QualifiedName ^^^^^^^^^^^^^.
UA_LocalizedText displayName
#define UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY